51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

JS验证18位身份证号码

# DEMO {#demo}

做表单验证的时候,经常会遇到身份证号码验证,下面就简单总结下基本方法。

# 身份证18位分别代表的含义 {#身份证18位分别代表的含义}

  1. 1-2 省级行政区代码
  2. 3-4 地级行政区划分代码
  3. 5-6 县区行政区分代码
  4. 7-14 出生年、月、日
  5. 15-17 顺序码,同一地区同年、同月、同日出生人的编号,奇数是男性,偶数是女性
  6. 18 校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示

# 验证方法 {#验证方法}

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

# 具体实现 {#具体实现}

function validIdCard(cardNo) {
  if (!cardNo || cardNo.length !== 18) {
    return false
  }
  // 17位数字本体码权重
  const w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  // mod11,对应校验码字符值
  const v = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
  let sum = 0
  for(let i = 0;i < 17;i++) {
    sum += cardNo.charAt(i) * w[i]
  }
  return cardNo.charAt(17).toUpperCase() === v[sum % 11]
}
赞(4)
未经允许不得转载:工具盒子 » JS验证18位身份证号码