php 身份證號碼效驗碼生成函數

最近網站(天氣預報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/)

對函數的返回碼可進行身份證號最後一位比對是否正確!

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