之前身份证验证都是用的一些简单的正则,发现后台容易多出很无效的身份证号。
然后狠狠的百度了一下身份证的编码规则,遂写出这样的方法,如有雷同,纯属巧合。
public static function idcard($id='')
{
$set = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
$ver = array('1','0','x','9','8','7','6','5','4','3','2');
$arr = str_split($id);
$sum = 0;
for ($i = 0; $i < 17; $i++)
{
if (!is_numeric($arr[$i]))
{
return false;
}
$sum += $arr[$i] * $set[$i];
}
$mod = $sum % 11;
if (strcasecmp($ver[$mod],$arr[17]) != 0)
{
return false;
}
return true;
}