用php写一个身份证号码验证函数
时间: 2023-02-24 22:58:40 浏览: 73
好的,以下是用 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
function validate_id_card($id_card) {
// 身份证号码格式验证
if (!preg_match('/^\d{17}(\d|x)$/i', $id_card)) {
return false;
}
// 身份证号码校验
$id_card = strtoupper($id_card);
$wi = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
$ai = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$sigma = 0;
for ($i = 0; $i < 17; $i++) {
$sigma += ($id_card[$i] * $wi[$i]);
}
$index = $sigma % 11;
if ($id_card[17] != $ai[$index]) {
return false;
}
// 身份证号码地区验证
$area_code = substr($id_card, 0, 2);
$area_codes = array(
'11', '12', '13', '14', '15', '21', '22', '23', '31', '32',
'33', '34', '35', '36', '37', '41', '42', '43', '44', '45',
'46', '50', '51', '52', '53', '54', '61', '62', '63', '64',
'65', '71', '81', '82', '91',
);
if (!in_array($area_code, $area_codes)) {
return false;
}
// 身份证号码出生日期验证
$birth_date_str = substr($id_card, 6, 8);
$birth_date = DateTime::createFromFormat('Ymd', $birth_date_str);
if (!$birth_date) {
return false;
}
$current_date = new DateTime();
if ($birth_date > $current_date) {
return false;
}
// 身份证号码校验码验证
$check_code = substr($id_card, 17, 1);
$check_codes = array(
'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2',
);
$check_sum = 0;
for ($i = 0; $i < 17; $i++) {
$check_sum += ($id_card[$i] * $wi[$i]);
}
$check_index = $check_sum % 11;
if ($check_code != $check_codes[$check_index]) {
return false;
}
return true;
}
```
你可以使用该函数来严格验证身份证号码是否合法。例如:
```php
if (validate_id_card('110101198001011234')) {
echo '合法的身份证号码';
} else {
echo '不合法的身份证号码';
}
```
注意,该函数中使用了 PHP 的 DateTime 类来处理身份证号码中的出生日期,因此需要 PHP 版本为 5.2.0 或更高。如果你使用的是较低版本的 PHP,你需要使用其他方式来处理身份证号码中的日期信息。
php练习,尝试开发一个页面,验证用户输入的身份证号长度是否正确。
好的,你可以使用strlen()函数来获取用户输入的身份证号的长度,然后再与预期的长度进行比较。以下是一个示例代码:
```php
<?php
$id_number = $_POST['id_number']; // 假设用户输入的身份证号存储在 $_POST['id_number'] 变量中
if (strlen($id_number) == 18) {
echo "身份证号长度正确。";
} else {
echo "身份证号长度不正确。";
}
?>
```
在上面的代码中,我们首先获取用户输入的身份证号,然后使用strlen()函数获取其长度,最后将其与预期的长度(18位)进行比较。如果长度相等,则输出“身份证号长度正确”,否则输出“身份证号长度不正确”。
需要注意的是,这只是一个简单的示例,实际情况下,还需要对用户输入的身份证号进行更加严格的验证,例如校验身份证号的格式是否正确、校验身份证号的前17位是否是数字等。