校验码是指“通过特定算法在原始数据末尾添加的冗余信息,用于检测或纠正数据在传输过程中可能出现的错误,它能通过算法运算验证原始数据的正确性。”
常见的校验码有:
- 用于身分证号码和ISBN码的最后一位
- 以及奇偶校验码
- 海明校验码
- 循环冗余校验码
- ......
身份证校验码
以身份证举例,18位数字组合的方式是:

4个码解释:
- 地址码
对于内地户籍居民,地址码是公民首次获得身份号码(例如新生儿出生登记、无户口人员登记户口)时所在县(市、镇、区)的行政区划代码,如110102是北京市西城区,如果日后行政区划出现调整或将户口迁往外地地址码也不会改变。由于新生儿通常根据属人主义确定户籍,故地址码并不总能代表公民的出生地。
对于港澳台居民,地址码根据居民的实际身份分配香港、澳门或台湾的行政区划代码,只精确到省级,第三位至第六位全部为0。 - 出生日期码
表示公民出生的公历年(4位)、月(2位)、日(2位)。 - 顺序码
是给同地址码同出生日期码的人编定的顺序号,其中奇数分配给男性,偶数分配给女性。 - 校验码
这里采用的是ISO 7064:1983, MOD 11-2校验码系统。校验码为一位数,但如果最后采用校验码系统计算的校验码是“10”,碍于身份证号码为18位的规定,则以“X”代替校验码“10”。
思考:这个校验码怎么计算出来的?
为什么会有 X?
最后一位只能有:1-10 里面任意一个数字。
身份证后面的X并不是字母X,而是罗马数字里的10。为什么不写10呢?因为如果是10,写出来身份证号码就变成19位了。在计算机二进制的编码中,位数必须保持一致。
想了解最后一位的校验码怎么算出?
需要了解一下弃九数。
弃九数 验算法的启发
什么叫弃九数?
比如有一个数字是:3217
- 如果把它每一位上的数字连续相加,3加2加1加7等于13。
- 继续把13的每一位上的数字相加,1加3等于4。
- 直到得到个位数字4为止,这个
4就叫做3217的弃九数。
(其实这个弃九数就是3217除以9之后的余数,只不过这种连续相加是一种快速算法法,很早以前的数学家就知道了。)
弃九数有什么用呢?
它可以检验运算是否准确。 平常在计算加减乘除运算的时候,是不是经常容易算错?
在没有计算机的年代,古人就很聪明,发明了弃九法。
比如,现在要检查一个乘法运算的结果是否正确:$$ 3169 * 732 = 2319708 $$
如果没有别的方法的话,只能把它重新算一遍。但是弃九法是怎么检验的?
- 首先把
3169的弃九数求出来,它是1。就是把每一位连续相加,最后得到个位数字1。 732它的弃九数是3。2319708的弃九数是3。- 最后,(用等式迁移的思维)我们同样计算,1*3=3,可以认为结果是正确的的。
但是如果用弃九法检验是错误的,则说明前面的运算有错误的。
这就是古人的验算方法,非常巧妙。下面继续回归怎么计算身份证的校验码。
但还需要了解一下同余理论。
弃九法和同余理论的关系
在弃九法发展的过程中,数学家们逐渐还认识到了弃七法、弃十一法、弃十三法等。这些方法其实都属于今天初等数论中的同余理论。
初等数论的教学大纲(高中数学课本):

什么是同余理论?
同余理论在我们日常生活中比较常见的服务是什么?
是计算校验码。 回归到正题了,身份证最后一位就是校验码。
注意:我说的校验码和手机短信验证码,不是同一个概念,注意区分。
为什么需要校验码?
和我们生活最息息相关的校验码就在身份证上。我们平常在手机或者电脑经常需要输入身份证号码,假如没有校验码,就是输入17位数字,很容易发生不小心有一位输错了,键盘的数字挨着近,或者某两位颠倒位置的情况。 那么有了第18位校验码,就能及时发现这种情况。正是因为一个小小的校验码,就可以保证整个系统的安全性。
身份证的校验码计算步骤(文字描述版):
那它是怎么算的?主要分三步:
-
首先身份证号码总共是17位,把前17位号码依次乘以不同的系数。比如第一位乘以7,第二位乘以9,第三位乘以10,以此类推,这在数学上叫做加权因子。相同两位加权因子不一样,是为了区分数位。(加权因子的作用)
系数为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2
第1位*7、
第2位*9、
第3位*10、
第4位*5、
第5位*8、
第6位*4、
第7位*2、
第8位*1、
第9位*6、
第10位*3、
第11位*7、
第12位*9、
第13位*10、
第14位*5、
第15位*8、
第16位*4、
第17位*2 -
把这17个乘积相加,然后取模11得余数;
-
余数和校验码对应表:
余数 0 1 2 3 4 5 6 7 8 9 10 校验码 1 0 X 9 8 7 6 5 4 3 2
计算出来的余数和校验码表对应,如果对应上了,就是正确。如果对应不上,就是错误。
公式描述:

实际做一次操作
例子:身份证号为:410928198904015474
步骤1.
步骤2.
步骤3.
余数和校验码对应表里 8 对应 4 ,正确!
一些常见的应用场景
数据完整性保障:
校验码通过计算和比对的方式,能够发现数据在传输、存储过程中是否发生错误,从而保证数据的完整性。
比如:书后面的ISBN编号,钱上的编号,证件编码,密码...
纠错能力:
某些校验码(如海明码)不仅可以检测错误,还能准确定位错误发生的位置,并进行纠正,提高数据传输的可靠性。
比如:在通信中,信号丢失是很正常的情况。为了防止信号丢失所造成的损失。可以考虑在信号后面加上校验码,这样前面如果丢失一个数字的情况下,还可以通过校验码找回来。如果信号是N位的,而我们在后面加上N-1位,那么就可以有前面丢失了N-1位时还能找回完整的信息。这种方法比单纯的重复发一遍信息要有效得多。
浙公网安备 33010602011771号