最近網站(天氣預報15天查詢)擴展添加身份證號碼查詢的便民功能,其在有一個關於身份證效驗碼的驗證功能,在這裏和大家分享!
首先要知道身份證的組成:
號碼的結構: 公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次爲:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
18位身份證號碼前17位相對是固定的,就是最後一位需要通過前17位按一定的算法生成!
校驗碼算法: 第十八位數,作爲尾號的校驗碼,是由號碼編制單位按統一的公式計算出來的,如果某人的尾號是0-9,都不會出現X,但如果尾號是10,那麼就得用X來代替,因爲如果用10做尾號,那麼 此人的身份證就變成了19位。X是羅馬數字的10,用X來代替10,可以保證公民的身份證符合國家標準
根據算法寫出對應的功能函數:
<?php function checkcode($idCard){ $Wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); // 加權因子 $ValideCode = array(1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2); // 身份證驗證位值.10代表X for ( $i = 0; $i < 17; $i++) { $sum += $Wi[$i] * $idCard[$i]; // 加權求和 } $valCodePosition = $sum % 11; return $ValideCode[$valCodePosition]; } ?>
本功能函數是驗證輸入的18位身份證號碼得到其真實有效的效驗碼!
實例運用:身份證號碼查詢(http://15tianqi.cn/sfz/)
對函數的返回碼可進行身份證號最後一位比對是否正確!