經常見到有些同志身份證最後一位是X,一直不知道是什麼原因,經過查找資料,終於發現原來身份證最後一位是校驗位,不是隨機生成的X,而是有一套計算公式,經過編程實驗,發現確實是這樣:
18位身份證號碼最後一位是通過公式得到的,具體的計算公式如下:
其中是表示第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