身份证号最后一位校验码是怎么算出来的?
18 位身份证的最后一位不是随手定的,而是一个加权取模算出来的校验位——连那个 X 也是算出来的。
身份证号第 18 位校验码,是把前 17 位数字按固定加权因子相乘后求和,再用这个和除以 11 取余数,最后按「余数 → 校验码」对照表查出来的一个字符。
加权因子从第 1 位到第 17 位依次是 7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2;余数 0 到 10 依次对应校验码 1、0、X、9、8、7、6、5、4、3、2。所以校验码里出现的 X 不是字母乱入,而是余数为 2 时的正常取值。
很多人第一次注意到身份证号最后一位,是因为它出现了字母 X。有人猜是「未知」,有人猜是「特殊标记」,其实它只是模 11 校验里一个普通的取值。
这套算法来自国家标准 GB 11643-1999,采用 ISO 7064:1983 的 MOD 11-2 校验方案。它的作用是在录入、传输环节快速发现号码抄错:只要有一位数字写错,算出来的校验码几乎必然对不上,这也是各种实名系统能当场判断「号码格式不合法」的原理。
1校验码的四步算法
手算一遍只需要四步,不需要任何工具。
- 把前 17 位数字逐位取出,从第 1 位排到第 17 位。
- 每位分别乘以对应的加权因子:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
- 把 17 个乘积相加,得到总和 S。
- 计算 S 除以 11 的余数,按下面那张表查出校验码,它就是第 18 位。
2余数与校验码对照表
这是标准给出的完整映射关系,可以逐行对照。注意它不是单调递增的,方向很容易记反。
| 余数(S mod 11) | 校验码 |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | X |
| 3 | 9 |
| 4 | 8 |
| 5 | 7 |
| 6 | 6 |
| 7 | 5 |
| 8 | 4 |
| 9 | 3 |
| 10 | 2 |
余数越大校验码越接近 2,余数 0 对应的是 1,余数 2 对应的才是 X。这张表不能反着背。
3一个能算出 X 的例子
取前 17 位 11010519491231002,逐位乘因子后求和得到 167,167 除以 11 的余数是 2,查表得校验码 X,所以完整号码是 11010519491231002X。换一个号码,把结果套进同一张表就行。
- 第 1 到 6 位
- 行政区划代码,对应出生登记所在的省市区县
- 第 7 到 14 位
- 出生日期,格式是 YYYYMMDD
- 第 15 到 17 位
- 顺序码,同一地区同一天出生的人按顺序编号;第 17 位奇数给男性、偶数给女性
- 第 18 位
- 校验码,取值范围是 0 到 9 或大写 X
4校验失败常见原因对照
校验位只能发现「抄错」,不能发现「伪造」。下面几类是最常见的报错场景。
| 现象 | 原因 | 怎么处理 |
|---|---|---|
| 提示校验位错误 | 某一位数字抄错、漏打或顺序颠倒 | 取前 17 位重新计算校验位,与原件比对 |
| 末位写成小写 x | 部分系统只认大写 | 统一改写为大写 X 再提交 |
| 长度不足 18 位 | 老式 15 位号码,或粘贴时丢了字符 | 15 位号码要先补全为 18 位再校验 |
| 行政区划代码对不上 | 区划代码后来被调整或撤并 | 校验通过与否和区划是否现役无关,需另查区划沿革 |
顺着这个问题往下用
全部工具总览 →相关疑问
校验码能判断身份证号是真是假吗?
不能。校验位保证的只是「这串数字在数学上成立」,不保证这个号码真实存在、也不保证它属于某个人。要核验真伪必须走官方实名核验渠道,站内工具只做格式检查与校验位计算。
为什么有的身份证号最后一位是小写 x?
国标规定校验码用大写 X,但不少系统允许小写输入。做数据存储时建议统一转成大写,否则同一个号码可能出现两种写法,导致去重失败。
15 位的旧身份证号怎么校验?
15 位号码本身没有校验位,需要先补成 18 位:在第 7 位之前插入「19」补全年份,再按算法算出第 18 位。补全后的号码在数学上成立,但不一定与当年的真实号码一致。
自己怎么复算核对?
按上面的加权因子逐位相乘求和再取模,对照余数表即可;也可以直接用站内工具输入前 17 位,工具会给出校验位与计算过程。
继续看:相关问题与资料
全部问题解答 →内容说明:本页针对具体使用问题作答,方法步骤与数值由本站自行整理与复算,事实性内容以对应官方规范与文档为准。内容最后核对日期:2026-10-08。若发现错误,欢迎通过页脚反馈入口告知。
速查在线工具箱