PHP 判断身份证号
时间: 2023-02-11 18:14:25 浏览: 61
PHP 检验身份证号可以使用正则表达式来实现。可以在正则表达式中规定身份证号的格式,然后使用 PHP 中的 preg_match 函数来判断输入的字符串是否符合这个格式。如果符合,返回 true,不符合返回 false。
下面是一个简单的例子,可以检验 18 位身份证号的合法性:
```
$id = "350823199001011234";
$pattern = "/^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/";
if (preg_match($pattern, $id)) {
echo "身份证号合法";
} else {
echo "身份证号不合法";
}
```
需要注意的是: 这个正则表达式只能检验号码的合法性而不能确保这是一个真正存在的身份证号
相关问题
php身份证号正规表达式
以下是一个使用正则表达式验证中国身份证号码的PHP代码示例:
```php
function checkIdCard($idCard) {
// 正则表达式模式
$pattern = '/(^\d{15}$)|(^\d{17}([0-9]|X)$)/';
// 使用preg_match函数进行匹配
if (preg_match($pattern, $idCard)) {
return "身份证号码格式正确";
} else {
return "身份证号码格式不正确";
}
}
$idCard = "身份证号码"; // 替换为要验证的身份证号码
$result = checkIdCard($idCard);
echo $result;
```
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,你需要使用其他方式来处理身份证号码中的日期信息。