郭園園
目前我國居民身份證號碼總共是18位,前17位都有具體含義:前6位是首次辦身份證時所在的省、市、區(qū)的代碼,中間8位是持證人的出生年、月、日,后面3位是申請戶籍時派出所的分配碼。唯獨(dú)最后一位數(shù)字,是對前面的數(shù)字進(jìn)行簡單的數(shù)學(xué)運(yùn)算后得出的,它是一個校驗碼。有的人會問:“為什么我身份證號的最后一位是字母X?”其實,這并不是字母X,而是羅馬數(shù)字Ⅹ。為什么不寫成10呢?因為如果寫成10,身份證號就變成19位了。在編碼學(xué)中,不一樣的數(shù)位不太容易存儲和使用。那為什么最后一位的校驗碼會算出10呢?其實,這種算法已經(jīng)有上千年的歷史了。
來自絲綢之路的數(shù)學(xué)
首先,我們來看一種古老的算法:棄九法。
15世紀(jì)初,撒馬爾罕城的統(tǒng)治者兀魯伯格很愛鉆研科學(xué)。他編訂了《兀魯伯格歷》。這么喜歡科學(xué)的一個人,當(dāng)然也很喜歡從帝國境內(nèi)網(wǎng)羅各種數(shù)學(xué)、天文學(xué)人才。
阿爾·卡西是兀魯伯格手下的首席科學(xué)家,也是兀魯伯格天文臺的第一任臺長。當(dāng)時的首席科學(xué)家不僅要幫助皇帝解決最困難的數(shù)學(xué)、天文學(xué)問題,還要給帝國境內(nèi)的工匠、官員,還有兒童、青少年編訂數(shù)學(xué)書。他編的這本書的名字叫《算術(shù)之鑰》,就是算術(shù)的鑰匙的意思。這本書囊括了跟今天小學(xué)和初中數(shù)學(xué)類似的內(nèi)容:算術(shù)、代數(shù)、幾何,書的第一卷講的是整數(shù)的運(yùn)算,比如加法、減法、乘法、除法,其中有一個算法很有意思,叫棄九法。
要了解棄九法,首先要弄清楚什么叫棄九數(shù)。比如,數(shù)字3217,把它每一位上的數(shù)字連續(xù)相加,3加2加1加7等于13;繼續(xù)把13的每一位上的數(shù)字相加,1加3等于4。直到得到個位數(shù)字4為止,這個4就是3217的棄九數(shù)。其實這個棄九數(shù)就是3217除以9之后的余數(shù),只不過這種連續(xù)相加的方法是一種快速算法。
棄九數(shù)有什么用?它最主要的作用是檢驗運(yùn)算是否準(zhǔn)確。比如,現(xiàn)在要檢查3169乘以732等于2319708是否正確。如果沒有別的方法的話,只能把它重新算一遍。但是用棄九法,首先把3169的棄九數(shù)求出來——1,再算出732的棄九數(shù)——3,接著算出2319708的棄九數(shù)——3,最后我們核驗一下1乘以3等于3,結(jié)果是正確的。這就是古人的驗算方法,其中充滿了智慧。大部分的數(shù)學(xué)知識,對普通人來講就是為了應(yīng)用。
阿爾·卡西作為首席科學(xué)家輔佐兀魯伯格制定天文歷法的時候,需要進(jìn)行大量運(yùn)算。為了達(dá)到高精度的運(yùn)算,阿爾·卡西也需要檢驗。作為一流的數(shù)學(xué)家,他在思考高維問題的時候比普通人具有優(yōu)勢,但如果只是比純粹的加減乘除運(yùn)算,數(shù)學(xué)家與普通人之間其實并無差別。
從棄九到同余
隨著歐洲文藝復(fù)興運(yùn)動的開展,阿拉伯的許多算法傳到了歐洲。而從明朝開始,西方的數(shù)理科學(xué)知識大量傳入我國,形成西學(xué)東漸。
在棄九法發(fā)展的過程中,數(shù)學(xué)家們又逐漸認(rèn)識到棄七法、棄十一法、棄十三法等。這些方法都屬于今天初等數(shù)論中的同余理論。同余理論在我們?nèi)粘I钪斜容^常見的應(yīng)用是什么?答案是計算校驗碼。
和我們生活最息息相關(guān)的校驗碼就是身份證號尾號。平日里,我們經(jīng)常需要在手機(jī)或者電腦上輸入身份證號,輸入這么長的數(shù)字很容易輸錯,有了第18位校驗碼,就能及時發(fā)現(xiàn)錯誤。只要一個小小的校驗碼,就可以保證整個系統(tǒng)的正常運(yùn)轉(zhuǎn)。
那它是怎么算的?主要分3步:首先身份證號碼總共18位,把前17位號碼依次乘以指定的系數(shù),第一位乘以7,第二位乘以9,第三位乘以10……這在數(shù)學(xué)上叫作加權(quán)因子;然后,把這17個乘積相加;最后,用所得和數(shù)除以11,看余數(shù)是多少。
某一個很大的數(shù)除以11,它的余數(shù)有多少種可能?如果整除的話,余數(shù)看成0;如果沒有整除,余數(shù)可能出現(xiàn)1、2、3、4、5、6、7、8、9,還有可能出現(xiàn)10,但是不可能出現(xiàn)11。按規(guī)定,不同的余數(shù)對應(yīng)著不同的校驗碼。比如余數(shù)是0的時候,它對應(yīng)的校驗碼就是1;余數(shù)是1的時候,它對應(yīng)的校驗碼就是0;余數(shù)是2的時候,它對應(yīng)的校驗碼是Ⅹ……這就是身份證號的最后一位可能是0、1、2、3、4、5、6、7、8、9、Ⅹ的原因。
校驗碼無處不在
在日常生活中,校驗碼是非常常見的。
平常去商店或者超市購物,你會看見條形碼。條形碼的最后一位也是校驗碼。識別的時候,只用拿掃描槍掃一下,機(jī)器就能根據(jù)條形碼的粗細(xì)來識別不同的數(shù)字。
條形碼蘊(yùn)含的信息太少了,畢竟只有幾個數(shù)字。所以除了條形碼,我們還有二維碼,二維碼蘊(yùn)含的信息更多。二維碼中的黑白小格,實際上就是數(shù)字0和1。它不僅含有校驗碼,還有其他信息,比如識別碼。
平常在掃二維碼的時候,如果拿手蓋住一塊,是不是還可以掃出來;或者二維碼有一些地方破損了,但是依然可以掃出來。這就是識別碼在起作用,它是更復(fù)雜的數(shù)學(xué)工具。在工業(yè)生產(chǎn)比如汽車裝配,或者更復(fù)雜的FAST天文望遠(yuǎn)鏡的裝配過程中,成千上萬個零件就需要二維碼的幫助,以完成組裝。
美國數(shù)學(xué)家莫里斯·克萊因在《西方文化中的數(shù)學(xué)》中說過這樣一句話:“數(shù)學(xué)知識如果脫離了它豐富的文化基礎(chǔ),就會被簡化成一些毫無意義、充滿技巧性的程序,數(shù)學(xué)的形象這時候就被扭曲了?!?/p>
任何一個數(shù)學(xué)公式、數(shù)學(xué)算法、數(shù)學(xué)定理背后都有它產(chǎn)生的源泉。比如身份證號中的算法,至少有一千年的歷史,它背后有著數(shù)學(xué)思想演化的脈絡(luò)。
(摘自《破繭成蝶·傳奇故事》2023年第10期)