从小,我就对这一串身份证号码特别好奇。

我发现,我身边的小可爱们和我拥有着相同的前六位身份证号码

并且第七位开始的八位和我生日是一样的

唯独最后四位我一直猜不出其中的含义(但是也从来没想过搜索一下)

根据Wikipedia介绍,中华人民共和国国家标准GB 11643-1999《公民身份号码》中规定:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。[^l1]

18位数字组合的方式是:

110102YYYYMMDD888X
地址码出生日期码顺序码校验码

其实话说回来,我还记得早些年我的户口本上写的身份证号是15位的,也就是说是没有出生日期的年份前两位和最后的校验位的(似乎又一次暴露年龄了hhh)

先来说一说校验位,身份证号一共18位,分别为a1,a2,,a18a_1,a_2,\cdot\cdot\cdot,a_{18},其中a18a_{18}就是校验位

那么校验位是怎样计算出来的呢?

从结论来说,和数字11有很强大的关系,最后一位是根据前17位的数字以及数字11计算出来的。

具体方式如下:

首先,根据公式“Wi=218i  mod  11W_i=2^{18-i}\;mod\;11”计算出来权重系数,即前17位身份证号分别乘以的系数,结果如下表

i123456789101112131415161718
Wi79105842163791058421

然后根据这个表,使用公式S=i=117aiWiS = \sum_{i=1}^{17}ai\cdot W_i,将前17位号码和对应权重系数乘积结果求和。

在根据公式a18=(12(S  mod  11))  mod  11a_{18}=(12-(S\;mod\;11))\;mod\;11

稍微解释一下这个公式,余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2,因此可以通过这个公式进行计算。[^l2]

你可能会说,明明就用17位,你把第18位权重计算出来有什么用

其实,这个规则不仅仅可以用于生成,而应用较多的是可以根据这个规则,去检验一个身份证号码的合法性(这里指是否符合构成规则)


对于前六位,这里提供一个对应的json文件(以js方式进行呈现)传送门

并且为了更好地演示这个规则,我将相应的规则写成一个HTML版本,方便小可爱进行实验: https://ridc.cha.moe/(已经上线啦)

网站https://ridc.cha.moe/所生成全部内容(包含但不限于身份证号和其对应姓名)仅为根据规则,通过随机数自动进行生成,并不具备任何真实性,请勿用于实名认证等需要填写身份证号码的地方,本网站及作者本人无法对使用者的行为进行限制,因此不会对产生的任何后果负责哦!

[^l1]: 中华人民共和国公民身份号码: https://zh.wikipedia.org/wiki/中华人民共和国公民身份号码

[^l2]: 身份证校验码: https://baike.baidu.com/item/身份证校验码