身份证号码编码规则及校验位校验算法
身份证18位分别代表的含义,身份证15位升级到18位,原来年用2位且没有最后一位,从左到右方分别表示
①1-2 升级行政区代码
②3-4 地级行政区划分代码
③5-6 县区行政区分代码
④7-10 11-12 13-14 出生年、月、日
⑤15-17 顺序码,同一地区同年、同月、同日出生人的编号,奇数是男性,偶数是女性
⑥18 校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示
身份证的每一位的具体算法模型,可以根据此表进行计算。
适用PHP代码实现的校验代码,只要将每位的对应权重乘以每个位上的数值,然后求和,最后与11求余数,得到的结果对比找到尾数即可。
function checkCardId($cardid) {
$len = strlen($cardid);
if($len!=18){
return false;
}
$a = str_split($cardid,1);
$w = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
$c = array(1,0,'X',9,8,7,6,5,4,3,2);
$sum = 0;
for ($i=0;$i<17;$i++){
$sum = $sum + $a[$i]*$w[$i];
}
$r = $sum%11;
$res = $c[$r];
if($res == $a[17]){
return true;
}else{
return false;
}
}