What is Check digit?

以人人都有,人人都必须要记得的身份证举例,18位数字组合的方式是:
校验码原理介绍-LMLPHP

4个码解释:

  • 地址码
    对于内地户籍居民,地址码是公民首次获得身份号码(例如新生儿出生登记、无户口人员登记户口)时所在县(市、镇、区)的行政区划代码,如110102是北京市西城区,如果日后行政区划出现调整或将户口迁往外地地址码也不会改变。由于新生儿通常根据属人主义确定户籍,故地址码并不总能代表公民的出生地。
    对于港澳台居民,地址码根据居民的实际身份分配香港、澳门或台湾的行政区划代码,只精确到省级,第三位至第六位全部为0。[1][2][3]
  • 出生日期码
    表示公民出生的公历年(4位)、月(2位)、日(2位)。
  • 顺序码
    是给同地址码同出生日期码的人编定的顺序号,其中奇数分配给男性,偶数分配给女性。
  • 校验码
    这里采用的是ISO 7064:1983, MOD 11-2校验码系统。校验码为一位数,但如果最后采用校验码系统计算的校验码是“10”,碍于身份证号码为18位的规定,则以“X”代替校验码“10”。

思考:这个校验码是什么?怎么计算出来的?

校验码的原理

身份证的最后一位数字就是验证码,是通过前面的数字进行简单的数学运算后计算出来的。下面我们就来看一下它究竟是怎么算出来的,为什么要进行这样的运算。

为什么会有 X?

最后一位只能有:1-10 里面任意一个数字。

身份证后面的X并不是字母X,而是罗马数字里的10。为什么不写10呢?因为如果是10,写出来身份证号码就变成19位了。在编码学中,不一样的数位就不太容易存储或者使用。

那么问题来了,那为什么最后一位的校验码会算出10呢?怎么能算出1-10?
需要了解一下弃九数

“弃九数”验算法的启发

什么叫弃九数?
比如有一个数字是:3217

  • 如果把它每一位上的数字连续相加,3加2加1加7等于13。
  • 继续把13的每一位上的数字相加,1加3等于4。
  • 直到得到个位数字4为止,这个4就叫做3217的弃九数。
    (其实这个弃九数就是3217除以9之后的余数,只不过这种连续相加是一种快速算法法,很早以前的数学家就知道了。)

弃九数有什么用呢?
它关键是要检验运算是否准确。 这个时候就有弃九法了,大家想一想,平常在计算加减乘除运算的时候,是不是经常容易算错?
古人就很聪明,发明了弃九法。

比如,
现在要检查一个乘法运算:$$ 3169 * 732 = 2319708 $$ 是否准确?

  • 如果没有别的方法的话,只能把它重新算一遍。
    但是弃九法是怎么检验的?
  1. 首先把3169的弃九数求出来,它是1。就是把每一位连续相加,最后得到个位数字1。
  2. 732它的弃九数是3。
  3. 2319708的弃九数是3。
  4. 最后,(用等式迁移的思维)我们看一下,1乘以3是不是等于3,结果是准确的。$$ 1 * 3 = 3 $$

这说明前面非常大的数字的乘法运算,大概率是正确的。但是如果用弃九法检验是错误的,说明前面的运算一定是错误的。
这就是古人的验算方法,充满了智慧(智慧一定不是指莽干)。

数学家只是有高维优势,普通计算都一样菜!

古代也有很多工程类计算,需要达到高精度的运算,前辈的数学家也需要检验。即使是一流的数学家,他也只是比普通人在考虑高维问题的时候具有优势。但是如果是比纯粹的加减乘除运算,数学家相对普通人来讲,其实他们的差别并不大。

弃九法和同余理论的关系

在弃九法发展的过程中,数学家们逐渐还认识到了弃七法、弃十一法、弃十三法等。这些方法其实都属于今天初等数论中的同余理论。

初等数论的教学大纲(高中数学课本):
校验码原理介绍-LMLPHP

什么是同余理论?

(这里只是初步入门介绍)
这种同余理论在我们日常生活中比较常见的服务是什么?
是计算校验码。 回归到正题了,身份证最后一位就是校验码。
注意:我说的校验码和你手机里的短信验证码,不是一码事,不是一个概念!注意区分。

为什么需要校验码?

和我们生活最息息相关的校验码就在身份证上。我们平常在手机或者电脑经常需要输入身份证号码,假如没有校验码,就是输入17位数字,很容易发生不小心有一位输错了,键盘的数字挨着近,或者某两位颠倒位置的情况。 那么有了第18位校验码,就能及时发现这种情况。正是因为一个小小的校验码,就可以保证整个系统的安全性。

身份证的校验码计算步骤(文字描述版):

那它是怎么算的?主要分三步:

  1. 首先身份证号码总共是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
  1. 把这17个乘积相加,然后取模11得余数;

  2. 余数和校验码对应表:

计算出来的余数和校验码表对应,如果对应上了,就是正确。如果对应不上,就是错误。

身份证的校验码计算步骤(公式描述版):

校验码原理介绍-LMLPHP

实际做一次操作

例子:410928198904015474

\[4*7+1*9+0*10+9*5+2*8+8*4+1*2+9*1+8*6+9*3+0*7+4*9+0*10+1*5+5*8+4*4+7*2 = 327 \]
\[327 mod 11 = 8 \]

8 对应 4 ,正确!

同余理论的验证思想,无处不在

  • 计算校验码,各种校验码,书后面的ISBN编号,钱上的编号,证件上的码,密码的...
  • 信号丢失
    在通信中,信号丢失是很正常的情况。为了防止信号丢失所造成的损失。可以考虑在信号后面加上校验码,这样前面如果丢失一个数字的情况下,还可以通过校验码找回来。如果信号是N位的,而我们在后面加上N-1位,那么就可以有前面丢失了N-1位时还能找回完整的信息。这种方法比单纯的重复发一遍信息要有效得多。
    编码是代数中的一个应用分支,是非常有用的。

Reference

https://mp.weixin.qq.com/s/dRlWjcysXM7vsIC2Y4aEUg

11-15 21:28