身份证号码校验

公民身份号码的校验遵循GB11643-1999标准

定义

身份号码(18位)包含由17位本体码(master number)和1位校验码(check number)组成。 具体校验算法参考GB11643-1999标准

18位身份证号码校验算法

function isIdNo18(num) {
  // 这里只做18位身份证号码校验
  if (num.length !== 18) {
    return false;
  }

  const arr = num.split("");
  // 将身份证末尾的x换成10
  arr[17] = arr[17].toLowerCase() === "x" ? 10 : arr[17];

  // 求和
  const sum = arr.reduceRight((prev, cur, i) => {
    return prev + (Math.pow(2, 17 - i) % 11) * Number(cur);
  }, 0);

  return sum % 11 === 1;
}