身份证尾号出现“X”的原因竟在这幅明朝古画之中?!
大家好!我是来自中国科学院自然科学史研究所的郭园园,今天非常高兴能在格致论道的舞台上,和大家聊一个关于数学的小话题。有些同学比较喜欢数学,但可能也有不那么喜欢数学的同学。我想通过这个演讲,让大家换一个角度来看待数学。
今天的主题是《身份证里的数学》。目前我国居民身份证号码总共是18位,前17位都有具体含义。前面的6位,是首次办身份证时所在的省、市的代码,中间是出生的年、月、日,后面是申请户籍时派出所的顺序码。唯独最后一位数字,是通过前面的数字进行简单的数学运算后计算出来的。它叫做校验码。今天,我们就来看看它究竟是怎么算出来的,为什么要进行这样的运算。
前两天,我女儿拿到了她的第一张身份证,她很兴奋地把我们大人的身份证都拿到一块。这个时候她发现:“为什么我身份证上最后一位是字母X,而你们身份证的最后一位都是数字?”
其实,这并不是字母X,而是罗马数字里的10。为什么不写10呢?因为如果是10,写出来身份证号码就变成19位了。在编码学中,不一样的数位就不太容易存储或者使用。那为什么最后一位的校验码会算出10呢?其实,这种算法已经有上千年的历史。而我正好是从事这项研究的,可以给孩子解释一下这个问题。
首先,我们来看一种古老的算法:弃九法。这需要提到一本古代的数学书,而写这本数学书的地点是在这幅古画中。《丝路山水地图》这幅画叫做《丝路山水地图》,目前收藏在故宫博物院。它是明代嘉靖年间的一幅长轴画,描绘的是从我国西部的嘉峪关到圣城麦加的广阔亚欧平原上的景色。城池用汉字标出,其中在长轴画中间的位置,有一个城池叫撒马尔罕城。
撒马尔罕是哪儿呢?就是今天位于我国新疆西部的乌兹别克斯坦的第二大城市撒马尔罕。在撒马尔罕城的旁边,还有一个小小的角楼,上面标了三个字“望星楼”。它实际上是当时撒马尔罕城旁边的郊区叫萨鲁伯格天文台。
为什么不仅画它的城池,还把天文台画出来?这说明在历史上,我国和沿丝绸之路的各个国家之间不仅进行了密切的经济贸易往来,也进行了密切的科学往来,特别数学和天文的交流是非常频繁的。左图就是画中显示的是萨鲁伯格天文台遗址。当时这个天文台经过岁月的摧残,它的地表部分已经被摧毁掉了。后来经过考古学家的挖掘,发现地下还存在着一个半径非常大的完整的六分仪。
画中的两个就是今天故事的主角。在公元15世纪初的时候,左边这位是皇帝,叫萨鲁伯格,也就是当时撒马尔罕城的统治者。萨鲁伯格不仅爱江山,而且还爱科学。如果把古今中外所有的皇帝按他们的科学素养进行排名的话,萨鲁伯格应该是名列前茅的。他编订了《萨鲁伯格历》,在当时世界范围内,它的精度都是非常高的。这么喜欢科学的一个人,当然也很喜欢从帝国境内网罗各种数学、天文学的人才。
右边这位是阿尔·卡西,就是萨鲁伯格手下的首席科学家,也是萨鲁伯格天文台的第一任台长。当时的首席科学家不仅要帮助皇帝解决最困难的数学、天文学问题,还要给帝国境内的工匠们、官员们还有小朋友们编订数学书。编的这本书名字叫《算术之钥》,这个名字听起来很怪,其实是当时阿拉伯书籍中比较常用的叫法,就是算术的钥匙。在这本书中包括了跟今天小学和初中类似的内容:算术、代数、几何。
这个算术内容,也包括了整数和分数。
其中第一卷是关于整数的运算,比如加法、减法、乘法、除法。还有一个算法很有意思,叫弃九法。如果你要了解弃九法的话,首先要清楚什么叫弃九数。比如有一个数字是3217,如果把它每一位上的数字连续相加,3加2加1加7等于13。继续把13的每一位上的数字相加,1加3等于4。直到得到个位数字4为止,这个4就叫做3217的弃九数。
其实这个弃九数就是3217除以9之后的余数,只不过这种连续相加是一种快速算法,很早以前的数学家就知道了。
弃九数有什么用呢?它关键是要检验运算是否准确。这个时候就有弃九法了,大家想一想,平常在计算加减乘除运算的时候,是不是经常容易算错?古人就很聪明,发明了弃九法。
当然,创造数学绝对不仅仅是为了考试。阿尔·卡西教小朋友的时候,也不是为了出各种各样的卷子来考大家。大部分的数学知识,对于普通人来讲是为了应用。阿尔·卡西作为首席科学家辅佐萨鲁伯格制定天文历法的时候,需要进行大量的运算。为了达到高精度的运算,阿尔·卡西也需要检验。作为一流的数学家,他比普通人在考虑高维问题的时候具有优势。但是如果是比纯粹的加减乘除运算,数学家相对普通人来讲,其实他们的差别并不大。
随着欧洲的文艺复兴,这些阿拉伯的算法传到了欧洲。而从明朝开始,我们国家的数学、天文学在世界范围内开始迅速地衰落。西方比较先进的数理科学知识也传入我们国家,形成西学东渐。于是在阿尔·卡西之后几百年的岁月中,这种算法被传到了全世界。
在弃九法发展的过程中,数学家们逐渐还认识到了弃七法、弃十一法、弃十三法等。这些方法其实都属于今天初等数论中的同余理论。比如,这张图片里展示的就是今天最常见的高中数学课本。这种同余理论在我们日常生活中比较常见的服务是什么?答案是计算校验码。
身份证号计算校验码的方法和我们生活最息息相关的校验码就在身份证上。我们平常在手机或者电脑经常需要输入身份证号码,假如没有校验码,就是输入17位数字,很容易发生不小心有一位输错了,或者某两位颠倒位置的情况。那么有了第18位校验码,就能及时发现这种情况。正是因为一个小小的校验码,就可以保证整个系统的安全性。
那它是怎么算的?主要分三步:首先身份证号码总共是17位,把前17位号码依次乘以不同的系数。
比如第一位乘以7,第二位乘以9,第三位乘以10,这在数学上叫做加权因子。相同两位加权因子不一样,是为了区分数位。然后把这17个乘积相加,相加之后除以11。这个时候弃十一法就出来了,它的算法思想已经有上千年的历史。某一个很大的数除以11,它的余数有多少种可能性?如果整除的话,余数是不是可以看成0?还可能出现1、2、3,还可能出现10,但是不可能出现11了。这样,不同的余数就会对应不同的校验码。
比如余数是0的时候,它对应的校验码就是1;余数是1的时候,对应的校验码就是0;余数是2的时候,校验码对应的是那个X。这就是为什么身份证的最后一位可能是0、1、2、3、4、5、6、7、8、9、X的原因。
下面来看一种更简单一点的算法,它依然是利用了弃十一法进行了校验码的运算。只要从正规的书店买到的图书,每一本书都会有一个ISBN编号,叫国际标准书号。
目前ISBN编号有两种:一种是10位的,另一种是13位的。这个10位的如何计算?如果是一个含有校验码的10位的ISBN编号,它的前9位是有具体含义的。第10位怎么算呢?比如,某一本书前9位的源号码是730904547,如何算最后一位?将第一位数乘以10,第二位数乘以9,第三位数乘以8,然后7、6、5、4、3、2,最后得到一个数字226。
然后计算226加上谁,可以被11整除,结果发现226加5就可以被11整除了。按照这个算法,校验码就应该是5,由此就得出了第10位的校验码。
总结来说,美国数学家莫里斯·克莱因在《西方文化中的数学》中曾经说过这样一句话:数学知识如果脱离了它丰富的文化基础,就会被简化成一些毫无意义、充满技巧性的程序,数学的形象这时候就被扭曲了。
因为我们在课堂中学的数学知识,其实是人类在数千年演化过程中,最需要掌握和最需要传承的。往往是因为时间的原因,老师没有办法把这些数学知识背后的故事告诉你。在中考、高考中,为了在考试中拿到高分,需要有针对性地刷题、不停地刷题。在这个过程中,难免就会觉得这些数学知识太枯燥了,它究竟有什么用呢?这样就会磨灭对于数学的兴趣。任何一个数学公式、数学算法、数学定理,它背后都有它产生的源泉。
比如身份证中的算法,它至少有一千年的历史,背后有它的数学思想、演化的脉络。当然对于普通人来讲,数学最大的用处是应用,而不仅仅是为了考试。我们学习数学,是为了更好地认识自然、改造自然。多学一点数学,可以让你看到这个世界上更丰富的色彩。谢谢大家!