18 位身份证号包含地区码、出生日期与校验位。下面这条规则校验结构与日期范围,但不计算校验位。
默认正则
/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/
匹配 18 位居民身份证号:前 6 位地区码、8 位出生日期、3 位顺序码与 1 位校验位(可为 X)。
18 位身份证号的结构为:6 位地址码 + 8 位出生日期(YYYYMMDD)+ 3 位顺序码 + 1 位校验位。
规则用 (?:18|19|20)\d{2} 限定年份,月份 01-12、日 01-31,末位允许数字或 X。
该规则不验证校验位,也不判断地区码是否真实存在;严格场景应配合校验位算法。
11010119900307123X4403011985120100111101011990130712341101011990030712311010119900307123YQ:这条正则会校验身份证校验位吗?
不会。它只校验长度与出生日期结构。校验位需要按加权算法计算,正则无法完成。
Q:为什么 110101199013071234 不匹配?
月份 13 超出 01-12 的范围,因此不匹配。
Q:支持 15 位旧版身份证号吗?
不支持。15 位旧号结构与 18 位不同,需要单独规则。
Q:末位 X 大小写都可以吗?
可以。规则使用 [\dXx],大小写 X 都能匹配。