演讲全文>>
大家好!我是来自中国科学院自然科学史研究所的郭园园,今天非常高兴能在格致论道的舞台上,和大家聊一个关于数学的小话题。有些同学比较喜欢数学,但可能也有不那么喜欢数学的同学。我想通过这个演讲,让大家换一个角度来看待数学。
今天的主题是《身份证里的数学》。目前我国居民身份证号码总共是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之后的余数,只不过这种连续相加是一种快速算法,很早以前的数学家就知道了。
弃九数有什么用呢?它关键是要检验运算是否准确。这个时候就有弃九法了,大家想一想,平常在计算加减乘除运算的时候,是不是经常容易算错?古人就很聪明,发明了弃九法。
比如,现在要检查一个乘法运算:3169乘以732等于2319708是否准确。如果没有别的方法的话,只能把它重新算一遍。但是弃九法是怎么检验的?首先把3169的弃九数求出来,它是1。就是把每一位连续相加,最后得到个位数字1。732它的弃九数是3。2319708的弃九数是3。然后我们看一下,1乘以3是不是等于3,结果是准确的。
这说明前面非常大的数字的乘法运算,大概率是正确的。但是如果用弃九法检验是错误的,说明前面的运算一定是错误的。这就是古人的验算方法,充满了智慧。
当然,创造数学绝对不仅仅是为了考试。阿尔 卡西教小朋友的时候,也不是为了出各种各样的卷子来考大家。大部分的数学知识,对于普通人来讲是为了应用。
阿尔 卡西作为首席科学家辅佐兀鲁伯格制定天文历法的时候,需要进行大量的运算。比如左边就是非常大的正弦表,正弦表中每一个数字是需要进行精确计算的。如果说作为天文精度的话,每一个数字在当时来讲,要达到小数点后面18位左右才有意义。太低的精度没有什么实际意义。
为了达到高精度的运算,阿尔 卡西也需要检验。作为一流的数学家,他比普通人在考虑高维问题的时候具有优势。但是如果是比纯粹的加减乘除运算,数学家相对普通人来讲,其实他们的差别并不大。
右边这张竖表,就是阿尔 卡西在计算根号3,他要把根号3计算到小数点后面的28位。这张表中有成百上千个数据,为了保证运算的准确性,阿尔 卡西就运用了弃九法,把每一步都进行检验,右边的每一个数据都是通过弃九法进行检验的。
随着欧洲的文艺复兴,这些阿拉伯的算法传到了欧洲。而从明朝开始,我们国家的数学、天文学在世界范围内开始迅速地衰落。西方比较先进的数理科学知识也传入我们国家,形成西学东渐。于是在阿尔 卡西之后几百年的岁月中,这种算法被传到了全世界。
在弃九法发展的过程中,数学家们逐渐还认识到了弃七法、弃十一法、弃十三法等。这些方法其实都属于今天初等数论中的同余理论。比如,这张图片里展示的就是今天最常见的高中数学课本。这种同余理论在我们日常生活中比较常见的服务是什么?答案是计算校验码。
和我们生活最息息相关的校验码就在身份证上。我们平常在手机或者电脑经常需要输入身份证号码,假如没有校验码,就是输入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位的校验码。
那它怎么起到校验作用?假如把第一个数输错了,本来是7,不小心输成8了。这种情况很容易出现,因为键盘是挨着的,输的时候有可能碰到边上了。按照这个乘以加权因子再相加求和,上面那个和已经不是226了,应该是236。因为第一个数字乘以10,不小心输成8了,就从226变成236了。这时236需要加上6才能够被11整除。那按照这个算法,校验码结果是6,而不是5了。
所以在真正操作的时候,如果有一个号码不小心输错了,但是最后校验码还是输的原来的号码,这时系统马上就会识别出这个号码是无效号码,是一个错误的号码。这是一个小小的数学的运算,但是它蕴含着巨大的力量,是整个系统的安全保障。
在日常生活中,这种校验码的思想还是非常普遍的。
比如,纪念钞的号码并不是随便写的。如果随便写一个号码,前面加字母,后面加上数字,它不一定是合法有效的。这里面就可能有加密或者是校验的运算。
平常去商店或者超市购物,都会看见这种条形码。条形码的最后一位也是校验码,只不过在识别的时候,会拿扫描枪去扫一下,根据条形码的粗细来识别它是不同的数字。顾客买了一件很贵的东西,但是输入的时候当成了一个很便宜的东西,假如有校验码,系统就会报错。而没有校验码的保护,很可能就会给超市造成损失。
条形码蕴含的信息太少了,毕竟只有几个数字。所以除了条形码之外,我们还有二维码,因为二维码蕴含的信息更多。这里面的黑白小格,实际上就是数字0和1。它不仅含有校验码,还有一些更多的信息,比如识别码。平常在扫二维码的时候,如果拿手盖住一块,是不是还可以扫出来?或者二维码有一些地方破损了,但是依然可以扫出来。这就是识别码在起作用,它是更复杂的数学工具。
在工业生产比如汽车装配,或者更复杂的FAST天文望远镜装配的时候,成千上万个零件其实更需要二维码的帮助,来进行这些系统的组装。
总结来说,美国数学家莫里斯 克莱因在《西方文化中的数学》中曾经说过这样一句话:数学知识如果脱离了它丰富的文化基础,就会被简化成一些毫无意义、充满技巧性的程序,数学的形象这时候就被扭曲了。
因为我们在课堂中学的数学知识,其实是人类在数千年演化过程中,最需要掌握和最需要传承的。往往是因为时间的原因,老师没有办法把这些数学知识背后的故事告诉你。在中考、高考中,为了在考试中拿到高分,需要有针对性地刷题、不停地刷题。在这个过程中,难免就会觉得这些数学知识太枯燥了,它究竟有什么用呢?这样就会会磨灭对于数学的兴趣。
我想通过刚才的小故事告诉大家:任何一个数学公式、数学算法、数学定理,它背后都有它产生的源泉。比如身份证中的算法,它至少有一千年的历史,背后有它的数学思想、演化的脉络。
当然对于普通人来讲,数学最大的用处是应用,而不仅仅是为了考试。我们学习数学,是为了更好地认识自然、改造自然。多学一点数学,可以让你看到这个世界上更丰富的色彩。
谢谢大家!