每日簡訊:身份證尾號是X的人到底有多特殊?
原創 不帶X的 四象工作室
這是一張目前通行的第二代居民身份證,有國徽的這面是正面,有個人信息的是反面,底部這串18位的編碼是身份證號。
(資料圖片僅供參考)
從左到右前6位數是地址碼,參考行政區劃代碼,依次代表省級、市級、縣級所在地區。
不過,由于行政區劃代碼曾多次修訂,哪怕來自同一個地方,身份證上這6位也可能不一樣。
隨后8位數字是出生日期碼,接下來的3位是該日期出生嬰兒的順序碼,在000到999之間,偶數被分配給女性,奇數被分配給男性。
那么,最后一位代表什么?為什么有人是數字,有人是X呢?
文 | Roxie 視覺 | 昭昭昭 導演&特效 | Ys 實習生 | 好好
前17位數字說盡了身份證主人的出生地、年齡和性別,而最后的字母并不攜帶實質信息,它是額外添加的校驗碼。
當我們手動輸入身份證號,除了多一位、少一位這種比較明顯的失誤,可能難以發現自己輸錯了。
而身份證最后一位的校驗碼可以快速檢測出這些錯誤,系統往往會彈出提醒,讓用戶重新輸入:
那么,校驗碼是怎么發現身份證格式錯誤的?
身份證最后一位校驗碼數值通過MOD運算得出,通過代入身份證前17位數字,計算出最后1位校驗碼,采用的算法是MOD 11-2。
具體公式長這樣:
這是一個求余公式,a?和W?的乘積之和除以11,余數是1。
i代表身份證號從右到左的位置序號,a?對應第i位置上的身份證數字,它們都為0到10之間的整數。現在以這個身份證號為例,計算一下a?的數值。
公式中的W?以2為基數,由另一個公式求余算出。根據公式,把所有a?和W?的數值相乘,再將乘積相加除以11,已知余數為1,由此可以計算出此處a?的值是10。
也就是說,這個身份證號最后1位應該是10,但直接用數字10會讓號碼從18位變成19位,因此用羅馬數字X來替代10。
身份證號最后一位1-X校驗碼都由此公式算出,如果你的身份證號出現X,說明根據前17位計算出的數值剛好為10。
X的存在解決了位數的問題,但有可能給身份證主人帶來煩惱,比如一些網站將身份證號的后6位作為初始密碼,卻不支持輸入字母。
既然10這么麻煩,為什么不干脆去掉它,把校驗碼的范圍限定在0到9呢?這是因為MOD 11算法識別各類錯誤的概率都在90%以上,MOD 10算法則無法保證如此高的識別率。
不止身份證號里有校驗碼,日常許多編碼都會用到,但計算校驗碼的方法各異。比如,法人和其他組織統一社會信用代碼用的是MOD 31-3算法,需要除以31取余數,得到的校驗碼在0到30之間,大于等于10的數字用英文字母代替。
商品條碼的校驗碼算法則不涉及余數,通過加減計算得出。
我們每天都要用到的二維碼(QR Code),則用到了更為復雜的里德-所羅門編碼,通過它生成的碼,已經超越了普通校驗碼“發現錯誤”的層次,上升到能“糾正錯誤”的level。
糾錯級別最高的一款,就算碼上高達30%的信息無法識別,依然可以還原出完整信息。
身份證號末尾的數字和X是與主人沒有關系的信息,但作為校驗碼中的一員,它僅有的一個字節隱藏著一連串的計算,在你輸錯時彈窗提醒,悄悄地刷一把公式的“存在感”。
你認識身份證號自帶X的人嗎?歡迎在評論區和我們交流。