
中华人民共和国国家标准GB 11643-1999“公民编号”规定: 公民编号是功能的组合校验码不对,由17位数字的身体代码和验证码组成.
公民身份号码是功能的组合,由十七位数字的身体密码和一位数字的验证码组成. 从左到右的排列顺序是: 六位地址码,八位出生日期码,三位顺序码和一位校验码.

地址代码表示编码对象永久居住地所在县(市,旗,区)的行政区划代码,并应按照GB / T 2260的规定执行.
出生日期表示编码对象的年份,月份和日期,并应按照GB / T 7408的规定执行. 年份,月份和日期代码之间没有分隔符. (例如: 某人的生日是1966年10月26日,他的生日代码是19661026. )

顺序码是指在同一地址码标识的区域内,将顺序号分配给同一年,同一月和同一天出生的人. 序列号的奇数分配给男性,偶数分配给女性.
证明代码是根据前十七位数字代码根据公式计算出的验证码.

将前一个ID号的17位数字乘以不同的系数. 第一位到第十七位的系数是: 7 9 10 5 8 8 2 2 1 6 3 7 9 10 5 8 4 2;
将17位数字与系数相乘的结果相加;
加11除以查看余数;
其余的只能包含11位数字0 1 2 3 4 5 6 7 8 9 10校验码不对,并且与它们相对应的最后一个ID卡的编号为1 0 X 9 8 7 6 5 4 3 2;
我从上面了解到,如果余数为2,则罗马X将出现在ID的第18位. 如果余数为10,则的最后一个数字为2.
function check(code) {
code = code.split('');
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2],
sum = 0,
ai = 0,
wi = 0;
for (var i = 0; i < 17; i++) {
ai = code[i];
wi = factor[i];
sum += ai * wi;
}
var last = parity[sum % 11];
return last == code[17];
}
此方法只能执行简单的前端验证. 我们在java背景中的判断方式是根据省,市和县的年,月和年来计算ID卡的后四位. 很多,但他们对自己的方法不太清楚
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-183252-1.html
只能说有些部分不好
我们的盟友大英帝国该出手了
呵呵土豪来炫富了