怎么用php判断身份证
时间 : 2023-03-24 06:43:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性
身份证号码是每个人的唯一标识符,它包含了很多个人的信息,如出生日期、性别、籍贯等等。因此,在进行身份证信息查询以及验证时,一定要仔细核对。在PHP中,我们可以使用正则表达式来验证身份证号码的合法性。下面,我将带领大家学习如何使用PHP来判断身份证。
1、身份证号码的规则
首先,我们需要了解身份证号码的规则,只有了解了规则,才能方便地进行验证。
18位身份证号码的组成结构如下:
前6位:表示的是户籍所在地的行政区划代码;
中间8位:表示的是出生日期,格式为(年年月月日日);
最后4位:表示的是出生顺序和性别,其中第17位为性别代码(奇数表示男性,偶数表示女性),最后一位是校验码。
2、使用正则表达式验证身份证
使用正则表达式验证身份证的合法性是很容易的,我们只需要在PHP中使用preg_match()函数即可,代码如下:
function validateIDCard($id_card) {
// 18位身份证验证正则
$reg_exp = '/^([1-9]\d{5})((19\d{2})|(20[01]\d))(0[1-9]|1[0-2])(0[1-9]|[12]\d|30|31)\d{3}(x|X|\d)$/';
if (!preg_match($reg_exp, $id_card)) {
return false;
}
return true;
}
在上述代码中,我们定义了一个函数validateIDCard(),其参数是要验证的身份证号码。函数中使用了正则表达式$reg_exp来验证身份证的合法性。如果验证通过,那么函数返回true;否则,函数将返回false。
3、校验码的计算方法
18位身份证号码中的最后一位是校验码,其计算方法如下:
将身份证号码前17位的每一位数字分别乘以不同的系数,然后将乘积相加,得到一个总和sum;
将sum除以11,得到一个余数mod;
根据余数mod的值,在下面这个列表中查找相应的校验码:
余数 mod 0 1 2 3 4 5 6 7 8 9 10
校验码 x 1 2 3 4 5 6 7 8 9 10
代码实现如下:
function validateIDCard($id_card) {
// 18位身份证验证正则
$reg_exp = '/^([1-9]\d{5})((19\d{2})|(20[01]\d))(0[1-9]|1[0-2])(0[1-9]|[12]\d|30|31)\d{3}(x|X|\d)$/';
if (!preg_match($reg_exp, $id_card)) {
return false;
}
// 计算校验码
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$verify_code_list = array('x', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
$sum = 0;
for ($i = 0; $i < 17; $i++) {
$sum += intval(substr($id_card, $i, 1)) * $factor[$i];
}
$mod = $sum % 11;
if ($verify_code_list[$mod] != strtolower(substr($id_card, -1))) {
return false;
}
return true;
}
在上述代码中,我们首先定义了一个数组$factor来保存身份证号码前17位每一位数字对应的系数;然后,我们又定义了一个数组$verify_code_list来表示校验码对应的值;接着,使用一个循环对前17位数字分别乘以系数并求和;最后,通过校验码的计算方法计算出校验码。如果校验码和身份证号码中的值相等,那么函数将返回true;反之,函数将返回false。
综上所述,我们可以使用以上方法来验证身份证号码的合法性。需要注意的是,身份证号码的验证只是验证其格式,验证通过并不代表身份证号码是真实有效的。在进行身份证号码验证时,请慎重核对。
在PHP中,可以使用正则表达式来验证身份证号码。以下是一个验证身份证号码的示例代码:
function checkIdcard($idcard){
$regex = "/^\d{17}[\d|x]|\d{15}$/";
if(!preg_match($regex,$idcard)){
return false;
}
// 加权因子
$weightFactor = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
// 校验码对应值
$checkCodeList = array('1','0','x','9','8','7','6','5','4','3','2');
// 获取身份证号码字符数组
$idcardArray = str_split($idcard);
if(strlen($idcard) == 15){
array_unshift($idcardArray, '0');
}
// 计算身份证号码校验码
$sum = 0;
for($i=0; $i<17; $i++){
$sum += intval($idcardArray[$i]) * $weightFactor[$i];
}
$mod = $sum % 11;
if($checkCodeList[$mod] == strtolower($idcardArray[17])){
return true;
}else{
return false;
}
}
上述代码首先使用正则表达式匹配身份证号码,如果不匹配则返回false。然后,将身份证号码字符数组转换为整型数组,并使用加权因子计算17位身份证号码的校验和,再根据校验和计算校验码,最后将校验码与输入的身份证号码的最后一位进行比较,如果相等则返回true,否则返回false。
使用示例:
$idcard = '513901199812301234'; // 要验证的身份证号码
if(checkIdcard($idcard)){
echo $idcard.'是有效的身份证号码';
}else{
echo $idcard.'不是有效的身份证号码';
}
总的来说,使用PHP的正则表达式和计算方法来验证身份证号码,可以快速、准确地判断身份证号码的有效性。
上一篇
php怎么编辑微信收款码
下一篇
php源码怎么看页面效果
https/SSL证书广告优选IDC>>
推荐主题模板更多>>
推荐文章