二代身份证都是 18 位
ddddddyyyymmddxxxy
dddddd: 地区码
yyyymmdd: 出生年月日
xxx:顺序类编码,无法确定。奇数为男,偶数为女
y: 校验位。可通过前17位计算获取
- 将前面 17 位数分别乘以不同的系数。从第 1~17 位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2
- 将这 17 位数字和系数相乘的结果相加;用加出来和除以11,看余数是多少
- 余数只可能有 0 、1、 2、 3、 4、 5、 6、 7、 8、 9、 10 这 11 个数字。其分别对应的最后一位身份证的号码为 1、0、X、9、8、7、6、5、4、3、2
function validate(id) {
var pattern = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|[X|x])$/;
if (!pattern.test(id)) {
return false;
}
var ids = id.split('');
var a = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var b = ['1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2'];
var sum_mod = a.reduce((prev, current, i) => prev + current * parseInt(ids[i], 10), 0) % 11;
return b[sum_mod] === ids[17].toString().toLowerCase();
}