身份证号第 18 位是怎么算出来的,X 代表什么

身份证号第 18 位是怎么算出来的,X 代表什么
第 18 位是前 17 位加权和的余数,X 代表十,专门替打错的号码兜底。

有些人的身份证号以 X 收尾,常见的猜测是「X 代表某种特殊身份」,其实它只代表数字 10——因为标准把身份证钉死在 18 个字符,校验位算出两位数时写不下,只好借用罗马数字。这个位置的使命也极其单纯:它不参与表达任何户籍信息,纯粹是前 17 位算出来的余数,让抄错的号码当场暴露。算法出自 ISO 7064 的 mod 11-2 方案,一支笔一张纸就能复算。

前 17 位先各管什么

第 1 到 6 位是行政区划代码,第 7 到 14 位是出生日期,第 15 到 17 位是顺序码——其中第 17 位单数分给男性、双数分给女性,这是「倒数第二位看性别」传闻的出处。第 18 位校验码则由前面所有数字共同决定,号码本身含义为零,作用相当于银行卡号末位那样的防伪钩子。

权重是 2 的幂除以 11 的余数

第 i 位的权重等于 2^(18-i) mod 11,17 个权重展开为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。为什么挑 2 的幂?因为在模 11 下 2 的幂以 10 为周期循环(2^10=1024,除以 11 余 1),序列永不归零;又因为 11 是质数,任何一位的数字误差(1 到 9)乘上非零权重都不可能被 11 整除,单键错误百分之百改变余数。换成 mod 10 就露馅:遇 10 归 0,一大类误差被模数直接吞掉,这就是校验取 11 的原因。

手工算一遍 11010519491231002X

把 1、1、0、1、0、5、1、9、4、9、1、2、3、1、0、0、2 逐位乘对应权重:7+9+0+5+0+20+2+9+24+27+7+18+30+5+0+0+4,加权和 167。167 除以 11 商 15 余 2。校验码按 (12−余数) mod 11 取:(12−2) mod 11=10,写成 X,完整号码正是 11010519491231002X。余数对照表为:0→1、1→0、2→X、3→9、4→8、5→7、6→6、7→5、8→4、9→3、10→2。做个破坏性验证:把第 7 位的 1 改成 2,加权和变 169,余数 4,对应校验码 8,与原 X 不符,错误号码被拦下。

它能拦住哪些错、拦不住哪些

单键错全中,上面已经证明。相邻两位互换(23 打成 32)时,和的变化量是 (a−b)(Wi−Wj),表内相邻权重之差只有一到五,数字之差最多是 9,都够不着 11 的倍数,所以相邻对调也全部现形。盲区在于权重相同的非相邻位互换:权重 7 同时出现在第 1 位和第 11 位,这两位对调余数纹丝不动,查不出来;若干位联动凑出 11 的倍数同样漏网。对录入框里「手滑一个字符」的日常场景,这套单校验位方案的拦截率接近全歼,成本只是乘法表。

为什么是 X,以及怎么自己验算

10 写成两个字符,号码就变 19 位,老式读卡器按定长 18 字符切分,格式会当场崩掉,用单字符 X 占住 10 是 ISO 7064 的通用约定,车牌和条码里也能撞见类似写法。整套算法的核心运算只有两个:2 的幂、除以 11 取余。可以打开 进制转换工具 把 1024 转成二进制、再除以 11 验证余 1,由此推出权重每 10 位循环一次;拿自己号码的前 17 位手算一遍加权和,最后一位对上了,这章就算真读懂了。

← 复利翻倍的 72 法则算得准吗?误差从哪里来 为什么 0.1+0.2 不等于 0.3:浮点数的表示误差 →