中国第二代身份证号码为18位,每一位都有其特定含义。本文从前端开发角度深入解析身份证编码结构,并提供校验码计算方法和正则验证表达式。

1 编码格式

1999年我国颁发了第二代居民身份证号,公民身份号码为18位,且终身不变,一代居民身份证编号是15位,已经基本淘汰,本文不作讨论。

居民身份证格式如:ABCDEFYYYYMMDDXXXR

1.1 地址码(ABCDEF)

表示登记户口时所在地的行政区划代码(省、市、县),如果行政区划进行了重新划分,同一个地方进行户口登记的可能存在地址码不一致的情况。行政区划代码按GB/T2260的规定执行。

1.2 出生日期码(YYYYMMDD)

表示该居民的出生年月日,年4位数字,月和日分别用2位数字表示,如19491001,;出生日期码是按GB/T 7408的规定执行的。

1.3 顺序码(XXX)

表示同一地址码区域内,同年、同月、同日生的人所编订的顺序号,根据自己身份证的顺序码就可以知道:与我们同年同月同日生的同性至少有多少个,且在我们之前登记户籍的有多少人。身份证顺序码的奇数分配给男性,偶数分配给女性。这就是为什么倒数第二位奇数表示男生,偶数表示女生。

2 校验码算法

将本体码各位数字乘以对应加权因子并求和,除以11得到余数,根据余数通过校验码对照表查得校验码。

2.1 加权因子

位置序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(本体码每个位置对应的加权因子)

2.2 校验码表

余数 0 1 2 3 4 5 6 7 8 9 10
校验码 1 0 X 9 8 7 6 5 4 3 2
(每个余数对应的校验码)

2.3 应用举例

某公民的身份证号码是34052419800101001X

第一步:本体码乘以加权因子:

1
3*7+4*9+0*10+……0*4+1*2=189

第二步:计算求和后除以11的余数

1
189%11=2

第三步:在检验码中查询余数对应的检验码

2所对应的校验码是X,注意X必须大写

2.4 js 正则表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
身份证 18
/^[1-9]\\d{5}[12]\\d{3}(?:0\\d|1[0-2])(?:[0-2][1-9]|3[0-1])\\d{3}(?:\\d|X|x)$/
身份证正则合并:15 & 18
/^\\d{15}$|^\\d{17}(?:[0-9]|X)$/

电话
/^((0\\d{2,3}-\\d{7,8})|(1[3584]\\d{9}))$/

中文2-4
/^[\\u4E00-\\u9FA5]{2,4}$/

邮件地址
/^\\w+@[a-zA-Z0-9]{2,10}(?:\\.[a-z]{2,4}){1,3}$/

3 参考

二代身份证编码规则

正则表达式