身份证号码编码规则及校验位校验算法

2017-06-19 10:47:45 查看 2029 回复 0

身份证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)表示

cdbf6c81800a19d8b5b7102131fa828ba61e4659

身份证的每一位的具体算法模型,可以根据此表进行计算。

b7fd5266d01609249091363fd60735fae6cd3459

适用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;
    }
}