中国[18位]公民身份证校验原理及代码

580 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的30天,点击查看活动详情

身份证号码是由中华人民共和国公安部制定并管理的,用于证明一个人的身份。身份证号码由18位数字组成,其中前17位为数字,最后一位为校验码。校验码是用来验证身份证号码的有效性的,它是通过对前17位数字进行校验计算得出的。

在校验身份证的时候我们一般分为两个部分:

  1. 格式校验,这一部分采用正则就可完成
/^\d{17}[\dX]$/
  1. 校验有效性,需要通过计算,在身份证有效性校验中详细介绍.

完整编码

var id = "111111111111111111"


function check(id){
  var id_patten = /^\d{17}[\dX]$/
  return id_patten.test(id)
}


function valid(id){

  // 1. 定义一个整型数组存储身份证号码的权重,例如:
  var weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]

  // 2. 定义一个整型数组存储身份证号码的校验码,例如:
  var check = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];


  // 3. 读入身份证号码,将其存储在一个字符串变量中。
  // 4. 遍历身份证号码的前17位数字,并将每一位与权重进行计算,最后求和。例如:

  var sum = 0;
  for (var i = 0; i < 17; i++) {
    sum += weight[i] * (id[i] - '0');
  }

  // 5. 取模后求余,得到校验码。例如:
  var code = sum % 11;

  console.log(code)

  // 6. 比较校验码与身份证号码的校验码是否一致,如果一致,则证明身份证号码有效;否则,证明
  var v = id[17] - '0' == check[code]
  return v
}

console.log("格式检查:",check(id))
console.log("有效性检查:",valid(id))

身份证有效性校验

要校验一个身份证号码的有效性,可以按照以下步骤进行:

  1. 将身份证号码的前17位数字按照如下权重进行计算:
      7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  1. 将计算结果与身份证号码的校验码进行比对,如果一致,则证明身份证号码有效;否则,证明身份证号码无效。

例如,对于身份证号码“410523199001011234”,可以进行如下计算:

4  1  0  5  2  3  1  9  9  0  0  1  0  1  1  2  3  4
  ×7  ×9  ×10  ×5  ×8  ×4  ×2  ×1  ×6  ×3  ×7  ×9 ×10  ×5  ×8  ×4  ×2
-----------------
28  9   0  25  16  12   2   9   0   0   1   0   1   2   6  12

计算结果为“287”,取模为“7”,校验码为“7”,由于校验码与身份证号码中的校验码一致,因此校验通过.

身份证构成

在实际应用中,需要对身份证号码进行合法性校验,确保身份证号码符合格式要求。例如,身份证号码必须由18位数字组成,且必须满足以下条件:

  1. 前6位为行政区划码,表示所在省、市、县的代码。
  2. 第7位和第8位为出生年份的前两位,例如19表示20世纪,20表示21世纪。
  3. 第9位和第10位为出生月份,例如01表示1月,12表示12月。
  4. 第11位和第12位为出生日期,例如01表示1日,31表示31日。
  5. 第13位至第17位为顺序码,表示同一地区同一出生日期的人按顺序号排列。
  6. 第18位为校验码,用于校验身份证号码的有效性。

如果要在程序中进行身份证号码的合法性校验,可以使用正则表达式来匹配身份证号码的格式。例如,可以使用如下的正则表达式来匹配身份证号码:

/^\d{17}[\dX]$/

如果身份证号码符合格式要求,则可以继续进行校验码的校验;否则,可直接给出校验不通过.

补充:

中国行政区划码是由中华人民共和国国家统计局制定的,用于统一编码中国的行政区划。行政区划码由6位数字组成,其中前2位数字表示省、直辖市、自治区的代码;接下来2位数字表示市的代码;最后2位数字表示县、区的代码。例如,北京市的行政区划码为“110000”,海淀区的行政区划码为“110108”。

行政区划码由国家统计局定期发布并更新,可以通过官方网站或官方渠道获取最新的行政区划码数据。中国行政区划码编码规则和数据可以在以下网站查询:

另外,中国行政区划码的编码规则和数据也可以在国家统计局提供的相关文档中查询,例如《中华人民共和国行政区划代码》(GB/T 2260)。