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