有时候注册一些网站要求输入身份证号码,然后把自己的信息修改一位或者两位之后发现报错,是不是觉得很神奇呢?
这里需要注意的是:
加权因子和校验码串为互联网统计 尾数自己测试11次 任意身份证都可以通过。
下面是代码: <br>
<?php <br />
/**<br>
* 函数说明:验证身份证是否真实<br>
* 注:加权因子和校验码串为互联网统计 尾数自己测试11次 任意身份证都可以通过<br>
* 传递参数:<br>
* $number身份证号码<br>
* 返回参数:<br>
* true验证通过<br>
* false验证失败<br>
*/<br>
function isIdCard($number) {<br>
$sigma = '';<br>
//加权因子 <br>
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);<br>
//校验码串 <br>
$ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');<br>
//按顺序循环处理前17位 <br>
for ($i = 0;$i
//提取前17位的其中一位,并将变量类型转为实数 <br>
$b = (int) $number{$i}; <br>
//提取相应的加权因子 <br>
$w = $wi[$i]; <br>
//把从身份证号码中提取的一位数字和加权因子相乘,并累加 得到身份证前17位的乘机的和 <br>
$sigma += $b * $w;<br>
}<br>
//echo $sigma;die;<br>
//计算序号 用得到的乘机模11 取余数<br>
$snumber = $sigma % 11; <br>
//按照序号从校验码串中提取相应的余数来验证最后一位。 <br>
$check_number = $ai[$snumber];<br>
if ($number{17} == $check_number) {<br>
return true;<br>
} else {<br>
return false;<br>
}<br>
}<br>
//eg<br>
if (!isIdCard('000000000000000001')) {<br>
echo "身份证号码不合法";<br>
} else {<br>
echo "身份证号码正确";<br>
}<br>
?>
AD:真正免费,域名+虚机+企业邮箱=0元