【DAY.10】php判斷18位身份賬號碼是否正確(基於加權算法)

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/phpbook/article/details/60778535

思路:18位身份證號碼,前17位配合加權因子加權求和,在通過取模11,獲取校驗碼所在的key,最後匹配第18位與所取得的key是否相符,來判斷是否符合

注意點:函數錄入變量時,如果類型爲整形,php爲自動轉化爲浮點型,造成後面操作錯誤

源碼

function isIdcard($number){
		//如果變量輸入爲數字,會自動轉化爲浮點型,下面操作也就無意義了
		if(gettype($number) != 'string'){
			echo '請以字符串的方式輸入';
			return;
		}
		//如果有x,轉化爲大寫X
		$number = strtoupper($number);	
		//加權因子	
		$weight = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
		//校驗碼
		$check = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
		//初始化加權和
		$sum = 0;
		//計算前17位加權和
		for($i=0;$i<17;$i++){
			$sum += (int)$number[$i]*$weight[$i];
		}
		//加權和取模11,結果就是校驗碼的key
		$checKey = $sum % 11;
		//判斷身份證第18位是否與取得的校驗碼相符
		if($number[17] == $check[$checKey]){
			echo "right";
		}else{
			echo "false";
		}
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章