经常见到有些同志身份证最后一位是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