一句话回答:X 代表数字 10

身份证号最后一位是校验码,用来验证前 17 位有没有写错。校验码的取值范围是 0 到 10,但 10 占两位,会破坏「身份证固定 18 位」的规则,所以用罗马数字 X 来代替。

也就是说,X 不是字母,是数字 10。它和「第 18 位是 5」「第 18 位是 7」没有本质区别,只是恰好轮到 10 的时候用 X 表示。

顺带说明:X 是罗马数字里的 10,这正好和它代表的数值一致,算是设计上的巧合(也可能是有意选择)。

校验码是怎么算出来的

校验码不是随机产生的,而是用前面 17 位按固定算法推导出来的。这个算法叫「加权求和取模」,分三步。

第一步:把前 17 位分别乘以对应的权重

身份证前 17 位(前 6 位地址码 + 8 位出生日期码 + 3 位顺序码)每一位都有一个固定的权重:

位置123456789
权重7910584216
位置1011121314151617
权重379105842

权重序列 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 是固定的,前 9 位和后 8 位有重复但不是简单循环。

第二步:把 17 个乘积相加,再除以 11 取余数

把每一位数字乘以它的权重,得到 17 个乘积,全部加起来得到总和 S,然后用 S 除以 11,取余数。

第三步:用余数查表得到校验码

余数012345678910
校验码10X98765432

注意余数 2 对应的校验码就是 X。这就是 X 出现的原因。

完整算一遍

拿一个示例号码 11010519491231002 来说明(这是常见的说明性示例,前 17 位):

各位数字与权重相乘:

1×7=7 1×9=9 0×10=0 1×5=5 0×8=0 5×4=20 1×2=2 9×1=9 4×6=24 
9×3=27 1×7=7 2×9=18 3×10=30 1×5=5 0×8=0 0×4=0 2×2=4

相加:7+9+0+5+0+20+2+9+24+27+7+18+30+5+0+0+4 = 167

167 ÷ 11 = 15 余 2

查表:余数 2 对应校验码 X。所以完整的身份证号最后一位是 X。

你可以用这个例子验证一下算法是否理解正确。如果手算得到的余数是 2,说明你算对了。

为什么用 11 取模,而不是 10

这涉及校验码的设计原理。用 11 取模有两个好处:

一是能检测出「写错一位」的情况。因为 11 是质数,且权重序列经过精心设计,任何单独一位写错,都会让最终余数发生变化,从而被检测出来。

二是能检测出「相邻两位写颠倒」的情况。这是常见的手写错误(比如把 12 写成 21)。如果用 10 取模就无法可靠检测这种错误。

正因为要留出 0 到 10 共 11 个可能值,而数字只有 0 到 9 十个,所以第 11 个值(10)必须用别的符号表示——于是选用了 X。

校验位能验证什么,不能验证什么

能验证:这个号码是不是「写错了」。如果输入时把某一位打错、或者两位顺序颠倒,校验位就会对不上,算法能立刻发现。这也是为什么各种系统录入身份证号后能立刻提示「号码格式错误」。

不能验证:这个号码是不是真实存在的、是不是属于某个人。因为任何人都可以伪造一个校验位正确的号码——只要按同样的算法算一遍最后一位就行。

这一点很重要:校验位只是「防手误」,不是「防伪造」。所以任何系统都不能只靠校验位来判断身份证真伪,还需要和公安部门的权威数据库比对。看到「校验通过」就认为身份真实,是常见的技术误解。

除了校验位,身份证号还包含什么信息

18 位身份证号由四部分组成:

位数含义
第 1–6 位地址码:前 2 位是省级行政区,中间 2 位是市级,后 2 位是区县级
第 7–14 位出生日期码:格式为 YYYYMMDD,如 19900101
第 15–17 位顺序码:同一地区同一天出生的人的排序;第 17 位奇数为男性、偶数为女性
第 18 位校验码:0–10,10 记作 X

所以从身份证号里可以读出:出生地(到区县)、出生日期、性别、以及一个校验位。但读不出姓名、住址、具体出生时间等信息。

顺带纠正一个常见误解:第 17 位表示性别,不是第 18 位。很多人记错了位置。

关于隐私的提醒

身份证号属于个人敏感信息。需要提醒的是:

· 不要在公开场合(社交平台、群聊)发送完整身份证号,即使打了马赛克也可能被还原部分信息。

· 需要提供时,建议只在官方渠道或明确的业务场景填写,并留意对方是否有正当理由。

· 很多平台只需要验证身份,不需要留存完整号码,可以询问能否只提供部分信息。

用本站在线校验工具时,号码不会上传服务器——校验全程在你的浏览器里计算,页面不会把你的身份证号发给任何地方。这一点可以用浏览器开发者工具的 Network 面板自行验证。