php怎么判断身份证是
时间 : 2023-03-28 10:19:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性
在PHP语言中,可以通过一些函数来判断一个身份证号码是否正确。身份证号码是一个18位的数字或者17位的数字加上一个字母X,编码规则由**规定,其前17位为省份、出生年月日、性别等信息,最后一位通常为校验码,可以根据前17位的数值推算出来。下面我来介绍一下PHP中可以用来验证身份证号码是否正确的方法。
方法一、使用preg_match()函数
preg_match()是PHP中一个常用的正则表达式匹配函数,可以用来匹配身份证号码的格式是否正确。代码如下:
```php
function isIDCard($id_card) {
$pattern = '/^\d{17}(\d|X)$/';
$isMatch = preg_match($pattern, $id_card);
return $isMatch ? true : false;
}
该函数的实现思路是通过正则表达式来匹配身份证号码的格式,如果匹配成功返回true,否则返回false。
方法二、根据身份证计算校验码
身份证号码的最后一位通常是一个校验码,可以根据前17位数字进行推算得出。校验码的计算方法如下:
1、将前17位数字加权求和,其中检验码除外:
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值(0~9)
Wi:表示第i位置上的加权因子 加权因子Wi =pow(2,17-i)%11。
2、计算模
Y = mod(S, 11)
3、根据模值得到对应的校验码
(Y == 0) => 1
(Y == 1) => 0
(Y == 2) => X
(Y >= 3 && Y <= 10) => (12-Y)
代码如下:
```php
function isIDCard($id_card) {
if (strlen($id_card) == 18) {
$num = substr($id_card, 0, 17);
$sum_weight = 0;
for ($i = 0; $i < 17; $i++) {
$sum_weight += $num[$i] * pow(2, 17 - $i) % 11;
}
$check_code = $num[17];
if ($check_code == 'X') {
$check_code = 10;
}
$last_code = (12 - $sum_weight % 11) % 11;
if ($last_code == $check_code) {
return true;
}
}
return false;
}
以上两种方法都可以用来判断身份证号码的格式是否正确,其中第二种方法还可以判断身份证号码的校验码是否正确。
要判断身份证是否合法,需要先了解身份证号码的组成。
身份证号码是由18位数字和一个字母组成的,它包含了以下信息:
1.前6位代表出生日期(年月日);
2.第7-14位代表地区代码,表示你的出生地;
3.第15-17位代表你的性别和序列号,一般为奇数表示男性,偶数表示女性;
4.第18位为校验码,用于验证身份证号码的正确性。
下面是判断身份证号码是否合法的PHP代码:
function validate_id_card($id_card){
// 18位身份证验证正则表达式
$reg = '/^(\d{6})(19|20)(\d{2})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(\d{3})([0-9]|X)$/i';
if(!preg_match($reg, $id_card)){ //验证18位身份证号码格式是否正确
return false;
}else{
$id_card_length = strlen($id_card);
if($id_card_length == 18){ //如果是18位身份证号码,则进行验证
$id_card = str_split($id_card); //将字符串拆分成数组
// 加权因子
$sigma = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
// 校验码对应值
$verify_code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$sum = 0;
for($i=0; $i<17; $i++){
$sum += $id_card[$i] * $sigma[$i];
}
$residue = $sum % 11; //计算余数
$verify = $verify_code[$residue]; //获取校验码
if($verify != strtoupper($id_card[17])){ //验证校验码是否正确
return false;
}
}
}
return true;
}
以上代码分为两部分:
第一部分用正则表达式验证身份证号码格式是否正确;
第二部分采用加权求和的方式验证身份证号码的校验码是否正确。
使用该函数,可以方便地判断身份证号码是否合法。
上一篇
php怎么是图片叠加定位
下一篇
php数据库怎么表格数据
https/SSL证书广告优选IDC>>
推荐主题模板更多>>
推荐文章