身份證尾號是X的人到底有多特殊?

原創 不帶X的 四象工作室

這是一張目前通行的第二代居民身份證,有國徽的這面是正面,有個人資訊的是反面,底部這串18位的編碼是身份證號。

身份證尾號是X的人到底有多特殊?

從左到右前6位數是地址碼,參考行政區劃程式碼,依次代表省級、市級、縣級所在地區。

不過,由於行政區劃程式碼曾多次修訂,哪怕來自同一個地方,身份證上這6位也可能不一樣。

隨後8位數字是出生日期碼,接下來的3位是該日期出生嬰兒的順序碼,在000到999之間,偶數被分配給女性,奇數被分配給男性。

那麼,最後一位代表什麼?為什麼有人是數字,有人是X呢?

文 | Roxie 視覺 | 昭昭昭 導演&特效 | Ys 實習生 | 好好

前17位數字說盡了身份證主人的出生地、年齡和性別,而最後的字母並不攜帶實質資訊,它是額外新增的校驗碼。

身份證尾號是X的人到底有多特殊?

當我們手動輸入身份證號,除了多一位、少一位這種比較明顯的失誤,可能難以發現自己輸錯了。

而身份證最後一位的校驗碼可以快速檢測出這些錯誤,系統往往會彈出提醒,讓使用者重新輸入:

身份證尾號是X的人到底有多特殊?

那麼,校驗碼是怎麼發現身份證格式錯誤的?

身份證最後一位校驗碼數值透過MOD運算得出,透過代入身份證前17位數字,計算出最後1位校驗碼,採用的演算法是MOD 11-2。

具體公式長這樣:

身份證尾號是X的人到底有多特殊?

這是一個求餘公式,a和W的乘積之和除以11,餘數是1。

i代表身份證號從右到左的位置序號,a對應第i位置上的身份證數字,它們都為0到10之間的整數。現在以這個身份證號為例,計算一下a的數值。

公式中的W以2為基數,由另一個公式求餘算出。根據公式,把所有a和W的數值相乘,再將乘積相加除以11,已知餘數為1,由此可以計算出此處a的值是10。

身份證尾號是X的人到底有多特殊?

也就是說,這個身份證號最後1位應該是10,但直接用數字10會讓號碼從18位變成19位,因此用羅馬數字X來替代10。

身份證尾號是X的人到底有多特殊?

身份證號最後一位1-X校驗碼都由此公式算出,如果你的身份證號出現X,說明根據前17位計算出的數值剛好為10。

身份證尾號是X的人到底有多特殊?

X的存在解決了位數的問題,但有可能給身份證主人帶來煩惱,比如一些網站將身份證號的後6位作為初始密碼,卻不支援輸入字母。

既然10這麼麻煩,為什麼不乾脆去掉它,把校驗碼的範圍限定在0到9呢?這是因為MOD 11演算法識別各類錯誤的機率都在90%以上,MOD 10演算法則無法保證如此高的識別率。

身份證尾號是X的人到底有多特殊?

不止身份證號裡有校驗碼,日常許多編碼都會用到,但計算校驗碼的方法各異。比如,法人和其他組織統一社會信用程式碼用的是MOD 31-3演算法,需要除以31取餘數,得到的校驗碼在0到30之間,大於等於10的數字用英文字母代替。

身份證尾號是X的人到底有多特殊?

商品條碼的校驗碼演算法則不涉及餘數,透過加減計算得出。

我們每天都要用到的二維碼(QR Code),則用到了更為複雜的裡德-所羅門編碼,透過它生成的碼,已經超越了普通校驗碼“發現錯誤”的層次,上升到能“糾正錯誤”的level。

糾錯級別最高的一款,就算碼上高達30%的資訊無法識別,依然可以還原出完整資訊。

身份證號末尾的數字和X是與主人沒有關係的資訊,但作為校驗碼中的一員,它僅有的一個位元組隱藏著一連串的計算,在你輸錯時彈窗提醒,悄悄地刷一把公式的“存在感”。

你認識身份證號自帶X的人嗎?歡迎在評論區和我們交流。

原標題:《身份證尾號是X的人 到底有多特殊?》