Skip to content

Latest commit

 

History

History
47 lines (35 loc) · 1.76 KB

中华人民共和国居民身份证.md

File metadata and controls

47 lines (35 loc) · 1.76 KB

二代身份证都是 18 位

18位身份证号码编码规则

ddddddyyyymmddxxxy
dddddd: 地区码
yyyymmdd: 出生年月日
xxx:顺序类编码,无法确定。奇数为男,偶数为女
y: 校验位。可通过前17位计算获取

校验规则

  1. 将前面 17 位数分别乘以不同的系数。从第 1~17 位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2
  2. 将这 17 位数字和系数相乘的结果相加;用加出来和除以11,看余数是多少
  3. 余数只可能有 0 、1、 2、 3、 4、 5、 6、 7、 8、 9、 10 这 11 个数字。其分别对应的最后一位身份证的号码为 1、0、X、9、8、7、6、5、4、3、2

JavaScript

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();
}

参考资料

  1. javascript身份证号码验证
  2. https://github.com/oxcow/id-number-validator
  3. https://github.com/mc-zone/IDValidator
  4. https://github.com/sincerefly/IDCardQuery/blob/master/python/data.txt
  5. 身份证号码开始两位的省份编号