Salitt应用中心

致力于打造多功能的微信公众号

如何用PHP计算身份证最后一位效验码

如何用PHP计算身份证最后一位效验码

一个身份证号码当然不是乱输入就可以使用的,最后一位是效验码,是需要通过一定公式来计算的。
我们在已知前17位身份证号的情况下,可以使用以下方法进行运算:

第一步:
将身份证号码的第1位数字与7相乘;
将身份证号码的第2位数字与9相乘;
将身份证号码的第3位数字与10相乘;
将身份证号码的第4位数字与5相乘;
将身份证号码的第5位数字与8相乘;
将身份证号码的第6位数字与4相乘;
将身份证号码的第7位数字与2相乘;
将身份证号码的第8位数字与1相乘;
将身份证号码的第9位数字与6相乘;
将身份证号码的第10位数字与3相乘;
将身份证号码的第11位数字与7相乘;
将身份证号码的第12位数字与9相乘;
将身份证号码的第13位数字与10相乘;
将身份证号码的第14位数字与5相乘;
将身份证号码的第15位数字与8相乘;
将身份证号码的第16位数字与4相乘;
将身份证号码的第17位数字与2相乘。

第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。

第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。

第四步:
如果余数为0,那对应的最后一位身份证的号码为1;
如果余数为1,那对应的最后一位身份证的号码为0;
如果余数为2,那对应的最后一位身份证的号码为X;
如果余数为3,那对应的最后一位身份证的号码为9;
如果余数为4,那对应的最后一位身份证的号码为8;
如果余数为5,那对应的最后一位身份证的号码为7;
如果余数为6,那对应的最后一位身份证的号码为6;
如果余数为7,那对应的最后一位身份证的号码为5;
如果余数为8,那对应的最后一位身份证的号码为4;
如果余数为9,那对应的最后一位身份证的号码为3;
如果余数为10,那对应的最后一位身份证的号码为2。

例子:比如说身份证号前17位是“44200019990206462”。(这个身份证号是我临时编的)
1.进行第一步的计算,式子为:

4X7=28
4X9=36
2X10=20
0X5=0
0X8=0
0X4=0
1X2=2
9X1=9
9X6=54
9X3=27
0X7=0
2X9=18
0X10=0
6X5=30
4X8=32
6X4=24
2X2=4

2.进行第二步的计算,将第一步所得的数相加,得284。

3.第三步的计算,将第二步的得数除以11,只取余数。
284/11=25.81
25X11=275
284-275=9
余数是9。

4.在第四步里,余数是9的话,身份证最后一位是3。

下面是PHP代码:

function getLastNumber($str){  
    $factor = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); // 前17位的权重  
    $c = array(1,0,'X',9,8,7,6,5,4,3,2); //模11后的对应校验码  
    if(strlen($str)!=17){  
        exit('请输入17位有效数字');  
    }  
    $res = 0;  
    for ($i=0; $i<17; $i++){  
        $res += intval($str[$i]) * $factor[$i];  
    }  
    return $c [$res % 11];  
}
echo getLastNumber("44200019990206462");

参考资料:
公式来源:http://jingyan.baidu.com/article/ff4116259e0a7112e48237b9.html
代码来源:http://blog.csdn.net/liuyuan_jq/article/details/7277400

评论已关闭

文章二维码

支付宝

QQ支付

微信支付