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

時間 2021-06-01 02:28:27

1樓:韋中一

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

2樓:叉一

首先,這套校驗碼計算方法不但沒有題主說的缺陷,反而很科學。

它能檢查出下列錯誤:

1、所有的單一字元替換錯誤(如1234被錯錄為4234)2、所有的或幾乎所有的單一字元對換位置錯誤(如12345被錯錄為12354)

3、所有或幾乎所有的迴圈位移錯誤(如123不錯錄為0123)4、大部分的雙替換錯誤(如1234567被錯錄為7234587)再說說題主問的校驗碼為什麼是0-,9加上X而不是0-9因為是對11進行求餘數而不是對10求餘數,如果是對10求餘數那麼校驗碼可以是0-9,但是對11求餘數,當餘數是10時,因為校驗碼必須是一位,所以才用羅馬數字X代表10

我在知乎專欄有一篇關於身份證號碼編碼規則的文章,可以看下實名認證前傳之身份證號碼編碼規則 - 支付結算雜談 - 知乎專欄

3樓:

因為校驗演算法涉及兩次mod 11的過程,具體的演算法一搜一大把,很簡單,不贅述。

為什麼要mod 11呢?因為mod 10的話不能保證校驗作用,當加權因子是偶數的時候,那麼這一位的數字相差5的時候就不能識別。比如第五位加權因子是8,3 * 8 mod 10 = 8 * 8 mod 10=4,則第五位如果由3誤寫成8的話,就校驗不出來。

至於更小的就更不行了,比如9的話任何一位差9也校驗不出來。

所以,這個數總結起來的要求就是:不能有大於1小於10的因數……那最小的只有11了。

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

天為峰 這個我覺得是沒有考慮到現在資訊處理的需要,當時都是手工處理的,這麼設計沒有多大問題。其實信用卡卡號用的校驗演算法就很好,完全是0到9中的乙個數字,也可以做到發現一位數錯誤的效果。沒有採用這個演算法,我估計同當時大環境有關?不想直接拿外國的來用,還是其他考慮,不得而知了 前17位每位數字 2 ...

如果身份證的發放與核實變成乙個私有企業經營的產品,我們國家會變成什麼樣呢?

Li Andy 很多企業都一直在發啊,就是會員卡啊。當然這東西,別的企業憑什麼認可啊。除非企業和企業之間有協議。國家也不認可啊,國家只認可國家自己發的身份證。國家憑什麼認可企業發的,就行你企業憑什麼任何別的企業發的。反過來,企業也可以不認可國家發的身份證 除非國家有法律法規,例如存款實名制 電信實名...

網上渠道購買的一整套的個人銀行卡 身份證 手機卡 U盾,是否真的?是否安全?

雪浪 這種錢千萬不能要,因為別人借用你的帳戶洗的是黑錢,一旦警察破案查資金流向必然會找到你朋友,如果用了裡面的錢怕到時候說不清楚 百匯猛獁 跟你樓主說個事。就今天下午剛剛發生的,我乙個鄰居從小沒上過學,腦子不太好使。因為這一點被別人利用了,四個月前,也就是去年的時候,不知道什麼人介紹。有個人找到他,...