写一个方法验证中国公民身份证格式是否正确

151 阅读1分钟

"```markdown

验证中国公民身份证格式是否正确

身份证号码是中国公民的唯一标识,它的格式和校验规则是确定的。下面是一个方法,用于验证中国公民身份证格式是否正确。

/**
 * 验证中国公民身份证格式是否正确
 * @param {string} idNumber 身份证号码
 * @returns {boolean} 验证结果,true 表示格式正确,false 表示格式错误
 */
function verifyIdNumber(idNumber) {
  const regExp = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/; // 身份证号码的正则表达式

  if (regExp.test(idNumber)) {
    // 判断身份证号码的长度和校验位
    if (idNumber.length === 15) {
      const year = idNumber.substring(6, 8);
      const month = idNumber.substring(8, 10);
      const day = idNumber.substring(10, 12);
      const birthday = new Date(`19${year}/${month}/${day}`);
      return (
        birthday.getYear() === parseInt(year, 10) &&
        birthday.getMonth() + 1 === parseInt(month, 10) &&
        birthday.getDate() === parseInt(day, 10)
      );
    } else if (idNumber.length === 18) {
      const year = idNumber.substring(6, 10);
      const month = idNumber.substring(10, 12);
      const day = idNumber.substring(12, 14);
      const birthday = new Date(`${year}/${month}/${day}`);
      return (
        birthday.getFullYear() === parseInt(year, 10) &&
        birthday.getMonth() + 1 === parseInt(month, 10) &&
        birthday.getDate() === parseInt(day, 10)
      );
    }
  }

  return false;
}

使用该方法,可以方便地验证一个身份证号码的格式是否正确。比如:

const idNumber = '110101199001011234';
const isValid = verifyIdNumber(idNumber);
console.log(isValid); // 输出 true

请注意,该方法只验证身份证号码的格式是否正确,并不对身份证的真实性进行验证。