插件窝 干货文章 PHP正则表达式匹配身份证号码的实用指南

PHP正则表达式匹配身份证号码的实用指南

PHP正则表达式匹配身份证号码的实用指南

在PHP开发中,验证身份证号码是一项常见的需求。本文将详细介绍如何使用PHP正则表达式来准确匹配中国大陆的身份证号码格式。

一、身份证号码的基本规则

中国大陆身份证号码遵循以下规则:

  • 18位长度(新式)或15位长度(旧式)
  • 18位身份证最后一位可能是数字或X(大小写均可)
  • 前17位必须是数字
  • 包含地区、出生日期和顺序码等信息

二、PHP正则表达式实现

1. 18位身份证正则表达式

// 18位身份证正则表达式
$pattern = '/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$/';

2. 15位身份证正则表达式

// 15位身份证正则表达式
$pattern = '/^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$/';

3. 同时匹配15位和18位身份证

// 同时匹配15位和18位身份证
$pattern = '/^([1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx])|([1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3})$/';

三、PHP实现身份证验证函数

function validateIDCard($idcard) {
    // 18位身份证正则
    $pattern18 = '/^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$/';
    
    // 15位身份证正则
    $pattern15 = '/^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$/';
    
    if(preg_match($pattern18, $idcard) || preg_match($pattern15, $idcard)) {
        return true;
    } else {
        return false;
    }
}

四、正则表达式解析

让我们分解18位身份证正则表达式:

  • ^[1-9] - 第一位不能是0
  • \d{5} - 接下来的5位地区码
  • (18|19|20) - 年份前两位,限制在18XX-20XX年
  • \d{2} - 年份后两位
  • (0[1-9]|1[0-2]) - 月份,01-12
  • (0[1-9]|[12]\d|3[01]) - 日期,01-31
  • \d{3} - 顺序码
  • [0-9Xx]$ - 最后一位校验码,可以是数字或X

五、注意事项

  1. 正则表达式只能验证格式,不能验证身份证的真实性
  2. 对于严格的验证,还需要校验最后一位校验码
  3. 15位身份证缺少出生日期中的世纪部分,验证能力有限
  4. 实际应用中应考虑将15位身份证转换为18位

通过本文介绍的PHP正则表达式方法,您可以轻松实现身份证号码的格式验证功能,为您的应用程序增加数据验证层。