公民身份号码看起来是一长串数字,最后却有时出现一个X。这个字符没有打破编码规则:它正是规则为“计算结果是10”准备的单字符写法。

要看懂它,先把整串号码分成四段。前面的部分承载特征,最后的部分负责检查录入;所谓“出生顺序”的说法,也要放回各段的用途里判断。

一排浅色空白码牌中,一块陶红色的X码牌突出在中央,旁边有方格纸和小算盘。
校验字符X的概念插画;码牌的数量和排列不表示真实身份号码,画面不含个人资料。

先把18位拆开

GB 11643—1999规定,这是一种由17位本体码和1位校验码连接起来的特征组合码。[1]

从左起的位置长度作用
第1—6位6地址码,对应行政区划。
第7—14位8出生日期码,按年、月、日连续书写。
第15—17位3顺序码,区分同一地址码、同一出生日期的人。
第18位1校验码,由前17位按规定的数学关系算出。

例如,1966年10月26日写成出生日期码就是19661026。这里不加横线或斜杠,年份占四位,月份和日期各占两位。这样,读码程序不必靠猜测来划分“年、月、日”。

地址码怎样逐层缩小范围

地址码不是电话号码式的任意前缀。前两位共同识别省级行政区划,后面再细分到地级、县级行政区划。在常见的大陆省级代码中,第一位还体现大区分组:

第一位常见大区分组
1华北
2东北
3华东
4中南
5西南
6西北

因此,山东的37和福建的35都以3开头,而湖北是42。单独拿第二位的7、5、2出来,并不能识别省份,必须与第一位合起来读。[4]

同样,完整的六位地址码对应一个行政区划编码,不能直接当成出生医院的位置或持证人的实时居住地。号码的用途是稳定识别一个人,地址码只是这一编码结构的一部分。

顺序码能说明什么

第15—17位是给同一地址码范围内、同年同月同日出生的人编定的顺序号。规则把奇数分配给男性,偶数分配给女性,于是第17位的奇偶性就能反映这项编码信息。

拿001、002、003、004作一组简单演示:001与003属于奇数一侧,002与004属于偶数一侧。它们能说明编号的奇偶分配,却不能据此断定某人是当天第几个出生,或实际办理登记的第几个人。标准定义的是为同地区、同生日的人编定的顺序号,并未把这个值定义为出生时间排行榜。

所以,“第17位有性别信息”与“后三位是出生排名”是两种不同的判断。前者有明确编码规则,后者超出了这串号码本身能够证明的内容。

校验位怎样算出来

最后一位的工作,是帮助发现本体码在录入或转录时出现的差错。它采用MOD 11-2校验系统;可以把实际计算分成加权求和、求余数、换算校验字符三步。[1]

第一步,从左到右,把前17个数字分别乘以下列权重,再把乘积相加,得到S。

位置1234567891011121314151617
权重7910584216379105842

第二步,计算S除以11的余数r。余数只能是0到10中的一个。

第三步,把余数换成校验字符。余数本身不一定就是末位字符,两者的对应关系如下:

余数r012345678910
校验字符10X98765432

数值上,可以把校验值写成“1减S后对11取非负余数”,也就是让S加校验值,再除以11,余数为1。若校验值是10,再把它写成X。

把公开示例完整算一遍

标准附录使用本体码11010519491231002来演示计算。这里采用的是标准公开示例,无需拿任何人的实际证件来试算。

将17位数字逐一乘以相应权重,乘积依次为:

7、9、0、5、0、20、2、9、24、27、7、18、30、5、0、0、4。

相加得到S=167。因为167=11×15+2,所以余数r=2。查对应表,余数2对应校验字符X,完整示例便是11010519491231002X。

也可以直接检查数值关系:X代表10,167+10=177;177除以11余1,符合校验条件。这里的X来自整段计算,没有独立的人口、出生顺序或特殊身份含义。

为什么用X表示10

校验值有0到10共11种可能,而十进制单个数字只有0到9共10种写法。若把末位的10直接写成两个字符,号码就会从18位变成19位,破坏固定长度。

罗马数字X代表十,正好用一个字符容纳第11种校验值。北京市公安局的说明也明确将末位X解释为校验码10的替代写法。[3]

校验码可以帮助发现输入错误,但满足这条算术关系,只能说明号码在这一项检查中一致,不能单独证明证件真实或持有人身份。它解决的是转录检查问题;开头看到的X,就是这套检查规则的一部分。