PHP正则表达式验证身份证号码的校验码的方法

WBOY
WBOY 原创
2023-06-24 10:58:02 1065浏览

身份证号码是人们在日常生活中经常需要使用的一种重要证件,而身份证号码中的最后一位校验码的验证是身份证号码是否合法的一个重要部分。在使用PHP编程时,我们可以通过正则表达式来对身份证号码中的校验码进行验证,以确保身份证号码的有效性。下面就介绍一下PHP正则表达式验证身份证号码的校验码的方法。

  1. 身份证号码的格式

首先,我们需要先了解一下身份证号码的格式。身份证号码由18位数字和字母组成,其中前17位是表示省、市、县区、出生日期等信息,最后一位是校验码。而校验码的计算规则如下:

  1. 将身份证号码前17位依次乘上对应的权重因子,即第i位的权重因子为Wi。
  2. 将这17个乘积相加得到S。
  3. 校验码N为11减去S除以11的余数,其中X表示10。
  4. 正则表达式的编写

有了以上的基础知识,我们就可以编写正则表达式进行身份证号码的校验了。下面是一个示例代码:

function checkIDCard($id_card){
    $pattern = '/^d{6}(19|20)d{2}(0d|1[0-2])([0-2]d|3[0-1])d{3}[0-9X]$/';
    if(preg_match($pattern, $id_card)){
        $wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
        $ai = str_split(substr($id_card, 0, 17));
        $n = 0;
        for($i=0; $i<17; $i++){
            $n += $wi[$i] * $ai[$i];
        }
        $c = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
        $check_code = $c[$n % 11];
        return $check_code == substr($id_card, -1);
    }
    return false;
}

$id_card = '33010219950917413X';
if(checkIDCard($id_card)){
    echo '身份证号码校验成功';
}else{
    echo '身份证号码校验失败';
}

上面的正则表达式中,d表示匹配数字,{6}表示匹配6次,(19|20)d{2}表示匹配以19或者20开头的4位数字,(0d|1[0-2])表示匹配01~12的月份,([0-2]d|3[0-1])表示匹配01~31的日期,d{3}表示匹配多三个数字,[0-9X]$表示以数字或者X结尾。这样就可以有效地匹配身份证号码了。

  1. 测试验证

最后,我们可以测试一下我们的代码是否有效。我们可以将身份证号码的校验码进行改动,以检查代码的校验功能是否正常。例如:

$id_card = '330102199509174133';

或者:

$id_card = '330102199509174139';

这两个身份证号码的校验码都是错误的,应该无法通过校验。而当我们运行代码后,就会看到输出了身份证号码校验失败的结果,证明我们的代码是可以正常工作的。

总之,利用PHP正则表达式验证身份证号码的校验码的方法是比较简单的,只需要编写一个适当的正则表达式和相关函数,就可以轻松地完成身份证号码的校验工作。

以上就是PHP正则表达式验证身份证号码的校验码的方法的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。