身份證最後一位出現“X”之原因

經常見到有些同志身份證最後一位是X,一直不知道是什麼原因,經過查找資料,終於發現原來身份證最後一位是校驗位,不是隨機生成的X,而是有一套計算公式,經過編程實驗,發現確實是這樣:

18位身份證號碼最後一位是通過公式得到的,具體的計算公式如下:

\sum \left ( A_{i}*2^{18-i} \right ) \mathrm{mod} \left ( 11 \right )

其中A_{i}是表示第i位身份證號碼,mod函數爲取餘函數

公式得到的數字是0-10,分別對應身份證號碼最後一位1 0 X 9 8 7 6 5 4 3 2 1 (相當於數列的循環移位)

經過代碼驗證,確實如此,matlab簡易代碼如下:

a = [4,1,1,0,];% 以逗號隔開的身份證號碼前17位
b = 1:17;
aa = sum(a.*2.^(18-b));
model = circshift(10:-1:0,2);%循環移位
output = model(mod(aa,11)+1)

參考:https://www.zhihu.com/question/21550849/answer/28986815
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章