在Web开发中,身份证号码的验证是一个常见需求。本文将详细介绍如何使用PHP正则表达式实现精准的身份证号码匹配验证。
中国大陆身份证号码由18位组成,各部分的含义如下:
以下是完整的PHP身份证号码验证函数:
function validateIdCard($idCard) {
// 18位身份证正则表达式
$pattern = '/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$/';
if (!preg_match($pattern, $idCard)) {
return false;
}
// 校验码验证
$idCard = strtoupper($idCard);
$factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
$verifyList = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
$sum = 0;
for ($i = 0; $i < 17; $i++) {
$sum += $idCard[$i] * $factor[$i];
}
$mod = $sum % 11;
return $idCard[17] == $verifyList[$mod];
}
让我们分解这个正则表达式:
^[1-9]\d{5} - 匹配前6位地区码,第一位1-9,后5位数字(18|19|20)\d{2} - 匹配年份(1800-2099)(0[1-9]|1[0-2]) - 匹配月份(01-12)(0[1-9]|[12]\d|3[01]) - 匹配日期(01-31)\d{3} - 匹配顺序码[0-9Xx]$ - 匹配最后一位校验码(0-9或X)$idCard = '11010519491231002X';
if (validateIdCard($idCard)) {
echo '身份证号码有效';
} else {
echo '身份证号码无效';
}
通过本文介绍的PHP正则表达式方法,您可以轻松实现身份证号码的精准匹配验证,提高Web表单的数据质量。