怎么用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的正则表达式和计算方法来验证身份证号码,可以快速、准确地判断身份证号码的有效性。