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/
发表评论 取消回复