中国18位身份证号码的编码规则如下:
340524 19800101 001 X ------ -------- --- - 地址码 出生日期 顺序码 校验码
计算方法可以表示为公式:∑(ci×Wi)(mod 11)
其中: ci表示从右向左数第i位上的数字,Wi是对应的计算因子,该因子的计算方法是2i-1 mod 11
下面的PHP函数展示了校验码的计算方法,同时也可用于检查身份证号码的有效性。
function verity_id($id = "34052419800101001*"){
if(strlen($id)!=18) return false;
// 从右向左算起
$sum = 0;
for($i=16; $i>=0; $i--){
$ci = $id[$i];
$Wi = (2<<(16-$i))%11 ;
$sum += $ci*$Wi;
}
$check = $sum%11;
// 余数: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
// 取值: 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2
$check = (12 - $check)%11;
if($check==10) $check='X';
return $id[17]==$check;
}
verity_id("34052419800101001X");
也叫行政区划代码,可以在国家统计局的网站上查到详细列表。