JAVA身份证号算法解析验证(待更新)
JAVA统一社会信用代码算法解析验证(待更新)
PHP统一社会信用代码算法解析验证
JAVA、PHP身份证算法解析: 其实上整个算法只是为了对比最后一位数是否正确
其实整体的思路和统一社会信用代码算法解析的思路是一样的
1.声明一个数组(加权因子) 以下是数组的元素 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
2.声明一个数组验证码字符值’1’,‘0’,‘X’,‘9’,‘8’,‘7’,‘6’,‘5’,‘4’,‘3’,‘2’
3.进行循环遍历取出身份证的第一位和加权因子的第一个元素进行相乘,接着第二位对第二个元素…
4.将每次相乘到的数值进行相加
5.总和除以验证码元素的个数,得到的余数
6.以此余数作为下标取验证码字符值的元素
7.将此元素和身份证最后一位进行对比一致就是正确的
下方代码可以直接放进代码中使用的传入身份证号就行:
public function shenfenzheng($Code){
$patrn = "/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/"; //身份证
if (strlen($Code)!= 18 || preg_match($patrn,$Code) == false) {
return false;
} else {
$weight=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //十七位数字本体码权重
$validate=array('1','0','X','9','8','7','6','5','4','3','2'); //mod11,对应校验码字符值
$str="10X98765432";
$sum=0;
$mode=0;
for($i=0;$i<strlen($Code);$i++){
$Ancode = substr($Code,$i, 1);
$sum=$sum+$Ancode*$weight[$i];
}
$mode=$sum%11;
$checkcode = substr($Code,17, 18);
if ($validate[$mode] != $checkcode) {
return false;
} else {
return true ;
}
return true ;
}
}