这个是以前就有的疑惑.. 好像当时去查了一下,只记得是“10”的含义了。如果只需要了解”X”的含义,这里明确说一下是数字“10”,用罗马数字“X”表示,该位是根据身份证前17位计算出来的校验码。

身份证各位数字的含义

  • 1-2:所在省市
  • 3-4:所在地区
  • 5-6:所在县区
  • 7-14:出生年月日
  • 15-16:户口所归属的派出所
  • 17:性别及顺序,男为奇数,女为偶数
  • 18:校验位

其中前面这17位统称本体码,是由本人的个人信息直接决定的;最后一位号码叫校验码,由前17位计算得出。

检验公式

公民身份号码的最后一位校验位采用的是ISO7064的校验码系统,其中数字型字符串使用的就是ISO7064中的MOD 11-2。即前17位数字每一位都会分配到一个权重,然后计算出来的和再模11得出校验码。

为什么需要校验码?

一个考虑是它的“校验”作用,比如用户在输入身份证时输错了前面的几位,如果没有校验位的话,这个输错的号码还是很有可能存在的;有了校验码之后,机器能立即知道这个身份证号码是不存在的。

为什么是除以11?

这个问题主要与校验码的检错率有关。模10不能防止身份证的相邻两位填反了,而取比10小的数会导致检错能力下降,比如取7的话,把其中一位的1错填成8,检验码也不会产生变化。更深入的讨论可以看下知乎