以人人都有,人人都必須要記得的身份證舉例,18位元數位組合的方式是:
4個碼解釋:
思考:這個校驗碼是什麼?怎麼計算出來的?
身份證的最後一位數位就是驗證碼,是通過前面的數位進行簡單的數學運算後計算出來的。下面我們就來看一下它究竟是怎麼算出來的,為什麼要進行這樣的運算。
最後一位只能有:1-10 裡面任意一個數位。
身份證後面的X並不是字母X,而是羅馬數位裡的10。為什麼不寫10呢?因為如果是10,寫出來身份證號碼就變成19位了。在編碼學中,不一樣的數位就不太容易儲存或者使用。
那麼問題來了,那為什麼最後一位的校驗碼會算出10呢?怎麼能算出1-10?
需要了解一下棄九數
什麼叫棄九數?
比如有一個數位是:3217
4
就叫做3217的棄九數。棄九數有什麼用呢?
它關鍵是要檢驗運算是否準確。 這個時候就有棄九法了,大家想一想,平常在計算加減乘除運算的時候,是不是經常容易算錯?
古人就很聰明,發明了棄九法。
比如,
現在要檢查一個乘法運算:$$ 3169 * 732 = 2319708 $$ 是否準確?
這說明前面非常大的數位的乘法運算,大概率是正確的。但是如果用棄九法檢驗是錯誤的,說明前面的運算一定是錯誤的。
這就是古人的驗算方法,充滿了智慧(智慧一定不是指莽幹)。
古代也有很多工程類計算,需要達到高精度的運算,前輩的數學家也需要檢驗。即使是一流的數學家,他也只是比普通人在考慮高維問題的時候具有優勢。但是如果是比純粹的加減乘除運算,數學家相對普通人來講,其實他們的差別並不大。
在棄九法發展的過程中,數學家們逐漸還認識到了棄七法、棄十一法、棄十三法等。這些方法其實都屬於今天初等數論中的同餘理論。
初等數論的教學大綱(高中數學課本):
(這裡只是初步入門介紹)
這種同餘理論在我們日常生活中比較常見的服務是什麼?
是計算校驗碼。 迴歸到正題了,身份證最後一位就是校驗碼。
注意:我說的校驗碼和你手機裡的簡訊驗證碼,不是一碼事,不是一個概念!注意區分。
和我們生活最息息相關的校驗碼就在身份證上。我們平常在手機或者電腦經常需要輸入身份證號碼,假如沒有校驗碼,就是輸入17位數位,很容易發生不小心有一位輸錯了,鍵盤的數位挨著近,或者某兩位顛倒位置的情況。 那麼有了第18位元校驗碼,就能及時發現這種情況。正是因為一個小小的校驗碼,就可以保證整個系統的安全性。
那它是怎麼算的?主要分三步:
加權因子
。相同兩位加權因子不一樣,是為了區分數位。(加權因子的作用)係數為: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
把這17個乘積相加,然後取模11得餘數;
餘數和校驗碼對應表:
餘數 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
校驗碼 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
計算出來的餘數和校驗碼錶對應,如果對應上了,就是正確。如果對應不上,就是錯誤。
例子:410928198904015474
8 對應 4 ,正確!
https://mp.weixin.qq.com/s/dRlWjcysXM7vsIC2Y4aEUg