php判断身份证的函数

PHP判断身份证的函数及SQL函数

身份证号码是一个十分重要的证件号码,我们需要对其进行验证,保证其正确性,以便于后续的使用。在PHP中,可以通过一些自带函数和正则表达式来判断身份证号码的正确性。

一、PHP判断身份证的自带函数

1.1 15位身份证号码

在PHP中,我们可以使用`ctype_digit()`函数判断一个字符串是否为数字,当字符串中所有字符都是数字时返回`true`,否则返回`false`。对于15位身份证号码,我们可以判断它是否全是数字,并且长度是否为15位。

```

function checkIdcard15($idcard) {

if (strlen($idcard) != 15) {

return false;

}

if (!ctype_digit($idcard)) {

return false;

}

return true;

}

```

1.2 18位身份证号码

对于18位身份证号码,我们需要对其进行更加严格的验证,包括校验位的验证。其中,校验位是身份证号码最后一位,用于校验身份证号码的有效性。

```

function checkIdcard18($idcard) {

if (strlen($idcard) != 18) {

return false;

}

if (!ctype_digit(substr($idcard, 0, 17))) {

return false;

}

$idcard_base = substr($idcard, 0, 17);

$idcard_vcode = substr($idcard, 17, 1);

$idcard_wfactor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

$idcard_checksum = 0;

for ($i = 0; $i < 17; $i++) {

$idcard_checksum += substr($idcard_base, $i, 1) * $idcard_wfactor[$i];

}

$idcard_mod11 = $idcard_checksum % 11;

$idcard_checkcode = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');

if ($idcard_checkcode[$idcard_mod11] != $idcard_vcode) {

return false;

}

return true;

}

```

- 声明一个校验位字符数组$idcard_checkcode。

- 计算身份证号码前17位与[idcard_checkcode]数组对应的权值的乘积,将乘积相加得到一个数值。

- $idcard_checksum变量存储以上计算结果除以11的余数。

- 根据余数,在$idcard_checkcode数组中找到对应的字符。

二、使用正则表达式判断身份证号码的正确性

除了使用自带函数之外,我们还可以使用正则表达式来判断身份证号码的正确性。对于15位和18位身份证号码,我们分别使用不同的正则表达式来判断。

2.1 15位身份证号码

对于15位身份证号码,因为其都是数字,我们可以使用`\d{15}`来表示。

```

function checkIdcard15ByRegex($idcard) {

$pattern = '/^\d{15}$/';

if (!preg_match($pattern, $idcard)) {

return false;

}

return true;

}

```

2.2 18位身份证号码

对于18位身份证号码,我们需要进行更加严格的验证,包括前17位数字的验证和校验位的验证。我们可以使用以下正则表达式来验证18位身份证号码。

```

function checkIdcard18ByRegex($idcard) {

$pattern = '/^(\d{6})(19|20)(\d{2})((0[1-9])|(1[0-2]))(([0-2][1-9])|(3[0-1]))(\d{3})([0-9]|X)$/';

if (!preg_match($pattern, $idcard)) {

return false;

}

$idcard_base = substr($idcard, 0, 17); // 截取前17位

$idcard_vcode = substr($idcard, 17, 1); // 截取校验位

$idcard_wfactor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

$idcard_checksum = 0;

for ($i = 0; $i < 17; $i++) {

$idcard_checksum += substr($idcard_base, $i, 1) * $idcard_wfactor[$i];

}

$idcard_mod11 = $idcard_checksum % 11;

$idcard_checkcode = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');

if ($idcard_checkcode[$idcard_mod11] != $idcard_vcode) {

return false;

}

return true;

}

```

以上正则表达式可以检查前17位是否符合日期格式和区域代码的规定,最后一位是否是校验位(数字或X)。

三、使用SQL函数判断身份证的正确性

在mysql中,我们可以使用字符集`utf8mb4`的`regexp`正则表达式函数来判断身份证号码的正确性。在判断15位身份证号码时,我们可以使用以下正则表达式:

```

SELECT '110101840715206' REGEXP '^[0-9]{15}$';

```

在判断18位身份证号码时,我们可以使用以下正则表达式:

```

SELECT '11010119840715641X' REGEXP '^([1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9X])$';

```

以上正则表达式也是根据国家规定而制定的。我们可以借助这一特性,在mysql中进行身份证号码的验证。

总结

以上是PHP判断身份证的函数及SQL函数,我们可以根据具体的需求来选择合适的函数。在实际使用中,应该结合实际情况进行开发,全面考虑到身份证号码的各种情况,保证程序的正确性。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(98) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部