用php写一个身份证号码验证函数
时间: 2023-02-24 07:58:40 浏览: 165
好的,以下是用 PHP 写的一个身份证号码验证函数:
```
function checkIDCard($id) {
if (strlen($id) != 18) return false;
$id = strtoupper($id);
$id_base = substr($id, 0, 17);
$id_check = substr($id, 17, 1);
if (!preg_match("/^\d{17}[0-9X]$/", $id_base . $id_check)) return false;
$id_list = str_split($id_base);
$id_sum = 0;
for ($i = 0; $i < 17; $i++) {
$id_sum += ((1 << (17 - $i)) % 11) * intval($id_list[$i]);
}
$id_mod = $id_sum % 11;
$id_check_list = array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
if ($id_check_list[$id_mod] != $id_check) return false;
return true;
}
```
这个函数可以用来验证身份证号码是否有效。如果身份证号码有效,则返回 true,否则返回 false。
相关问题
写一个验证身份证的php函数
以下是一个简单的PHP函数,用于验证身份证号码的有效性:
```php
function validate_id_number($id_number) {
// 判断身份证号码长度是否正确
if (strlen($id_number) != 18) {
return false;
}
// 判断身份证号码格式是否正确
if (!preg_match('/^\d{17}[\dxX]$/', $id_number)) {
return false;
}
// 判断身份证号码最后一位校验码是否正确
$id_arr = str_split($id_number);
$id_sum = 0;
$id_weight = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$id_check_code = array(1, 0, 'x', 9, 8, 7, 6, 5, 4, 3, 2);
for ($i = 0; $i < 17; $i++) {
$id_sum += $id_arr[$i] * $id_weight[$i];
}
$id_mod = $id_sum % 11;
if ($id_check_code[$id_mod] != strtolower($id_arr[17])) {
return false;
}
// 判断身份证号码中的出生日期是否正确
$id_birthday = substr($id_number, 6, 8);
if (!preg_match('/^\d{4}[01]\d[0123]\d$/', $id_birthday)) {
return false;
}
$id_year = substr($id_birthday, 0, 4);
$id_month = substr($id_birthday, 4, 2);
$id_day = substr($id_birthday, 6, 2);
if (!checkdate($id_month, $id_day, $id_year)) {
return false;
}
// 所有校验都通过,身份证号码有效
return true;
}
```
使用示例:
```php
$id_number = '330326198901011234';
if (validate_id_number($id_number)) {
echo '身份证号码有效';
} else {
echo '身份证号码无效';
}
```
用PHP写要求如下使用数组、表单、字符串处理函数等实现功能: 1.输入身份证号码并获取身份证号码 2.判断身份证是否合法 2.1判断身份证位数是否是18位或是15位,否则不是合法身份证,重新输入 2.2判断身份证出身年月日是否合法 2.3判断省份位是否合法 3.获得身份证所属省份,出生年月日和性别信息。
<?php
if(isset($_POST['submit'])) {
$idcard=$_POST['ID']; //获取身份证号码
$idcardLength=strlen($idcard); //身份证号码长度
if($idcardLength==18||$idcardLength==15) { //判断身份证位数是不是18位或15位
if($idcardLength==18) {
// 18位身份证号码检查
if(!preg_match('/^[0-9]{17}[0-9Xx]$/', $idcard)) {
echo '身份证号码格式错误';
} else {
$year=intval(substr($idcard,6,4));
$month=intval(substr($idcard,10,2));
$day=intval(substr($idcard,12,2));
if(checkdate($month,$day,$year)!=true) { //验证出生日期是否合法
echo '出生日期非法';
} else {
$areaNum=intval(substr($idcard,0,2)); //提取省份位数
$provinces=array(
array(11,'北京'),array(12,'天津'),array(13,'河北'),array(14,'山西'),
array(15,'内蒙古'),array(21,'辽宁'),array(22,'吉林'),array(23,'黑龙江'),
array(31,'上海'),array(32,'江苏'),array(33,'浙江'),array(34,'安徽'),
array(35,'福建'),array(36,'江西'),array(37,'山东'),array(41,'河南'),
array(42,'湖北'),array(43,'湖南'),array(44,'广东'),array(45,'广西'),
array(46,'海南'),array(50,'重庆'),array(51,'四川'),array(52,'贵州'),
array(53,'云南'),array(54,'西藏'),array(61,'陕西'),array(62,'甘肃'),
array(63,'青海'),array(64,'宁夏'),array(65,'新疆'),array(71,'台湾'),
array(81,'香港'),array(82,'澳门'),array(91,'国外')
); //创建二位数组 $provinces用来匹配省份名称
$isAreaNumExist=false; //用于判断省份码是否合法
foreach ($provinces as $element) {
if ($element[0]==$areaNum) {
$province=$element[1];//省份名称
$isAreaNumExist=true;
break;
}
}
if($isAreaNumExist==false) {
echo '非法省份';
} else {
$birthday=substr($idcard,6,8);
echo '省份:'.$province.'<br>';
echo '出生日期:'.$birthday.'<br>';
$sexNum=intval(substr($idcard,16,1)); //提取性别码
if($sexNum%2==0) {
$sex='女';
} else {
$sex='男';
}
echo '性别:'.$sex;
}
}
}
} else {
echo '15位身份证号码不支持验证';
}
} else {
echo '身份证号码位数不正确';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>验证身份证号码</title>
</head>
<body>
<form method='post' action=''>
<p>请输入身份证号码:<input type='text' name='ID'></p>
<input type='submit' name='submit' value='验证'>
</form>
</body>
</html>
阅读全文