身份證最後一位校驗碼為什麼要設計成某些情況下是X呢,如果都是數字不是更方便處理嗎?

時間 2021-05-05 19:14:22

1樓:天為峰

這個我覺得是沒有考慮到現在資訊處理的需要,當時都是手工處理的,這麼設計沒有多大問題。

其實信用卡卡號用的校驗演算法就很好,完全是0到9中的乙個數字,也可以做到發現一位數錯誤的效果。

沒有採用這個演算法,我估計同當時大環境有關?不想直接拿外國的來用,還是其他考慮,不得而知了

2樓:

前17位每位數字 × 2 ^ n(n從右往左數1到17)之和然後 mod 11。這麼說可以得出乙個有意思的結論。。。因為前17位每位數字 × 2 ^ n(n從右往左數1到17)之和一定是偶數,偶數%11可能得0,2,4,6,8,10(也就是X),那麼最後一位只有可能是0,2,4,6,8,X了吧。。。

利用率也不高

3樓:黃亮anthony

沒什麼不方便,只是對強迫症不友好。

科學一點說,這是乙個國際標準,基本考慮有兩個:

1. 十進位制數字串的校驗碼不能小於10個,才能保證漢明距離大於等於2,才能排除單字錯誤。

2. 不能與各位有公因數。即需要互質。以保證長度變化也能被檢查出來。

11是滿足兩個要求最小的數。

4樓:陳曉

身份證驗證演算法用的是mod11/2演算法。也就是2的i次冪的和第i位乘積的和對11取模。

2的冪對10取於只有2,4,8,6四種可能,取各個位數的乘積的和也必定是偶數,也就是說20%的重複可能,10個數字最多用到5個,這個顯然是過於浪費了。

5樓:賀師俊

校驗演算法是前17位每位數字 × 2 ^ n(n從右往左數1到17)之和然後 mod 11,其結果是0到10,分別對應10X98765432。

從取模的角度講,通常總是取質數,而mod 7,只能用0-6,浪費了,所以選了11,就多了個X(即羅馬數字的10)。

要說也確實有點不便,不過從好的方面來說也提示你身份證不是純數字,免得小白程式設計師用int32儲存結果出問題。

為何身份證的最後一位的演算法要如此設計?

韋中一 我認為如果非要使用字母做校驗碼,不如號碼本身也用字母,如字母表示省份 年月日等,這樣能大大縮短身份證號碼長度。如身份證使用數字,那麼校驗碼也應使用數字,若1位校驗碼不夠可以使用2位數作校驗碼,於是身份證號可表示為整數。不管哪種方法,都比現在這樣好。 叉一 首先,這套校驗碼計算方法不但沒有題主...

第一代身份證和第二代身份證最後兩位數不一致,派出所開證明需要提供一代身份證影印件,我沒有該怎麼辦?

長安執金吾 請詳細敘述問題,明確到底是不是公安機關在換代身份證時將你的身份證號碼弄錯了。第一代身份證和第二代身份證的主要區別是前者15位號碼後者18位號碼,身份證號碼肯定有變化,這種是正常換代帶來的變化,不屬於錯誤。而身份證15位公升至18位後,原號碼不變,需證明是同乙個人的,派出所不再開具相關證明...

設計身份證的人為什麼不再給身份證新增乙個編號?這樣就解決了丟失冒用的問題?

我也想過這個問題,但是卡片號碼不是自增序列,而是UUID。但是基礎概念是一樣的,增加乙個與身份證實體繫結的鍵。UUID對我們來說透明,我們只通過身份證號碼標記身份。每個人同時只有乙個UUID是生效的,掛失的時候,將當前生效的UUID標記為失效,然後再把新身份證的UUID生效。刷身份證的時候,UUID...