在PHP开发中,验证身份证号码是一项常见的需求。本文将详细介绍如何使用PHP正则表达式来准确匹配中国大陆的身份证号码格式。
中国大陆身份证号码遵循以下规则:
// 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]$/';
// 15位身份证正则表达式
$pattern = '/^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$/';
// 同时匹配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})$/';
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通过本文介绍的PHP正则表达式方法,您可以轻松实现身份证号码的格式验证功能,为您的应用程序增加数据验证层。