Live2D

身份证,港澳通行证,台胞证,记一下三个常用的正则判断

正则判断

// 身份证校验
export function checkIdCard(value: string) {
  console.log('checkIdCard', value);

  if (!value) return false;

  const ID = value.toUpperCase();
  if (/^[1-9][*]{16}[0-9x]$/i.test(ID)) {
    return true;
  }

  const city = {
    11: '北京',
    12: '天津',
    13: '河北',
    14: '山西',
    15: '内蒙古',
    21: '辽宁',
    22: '吉林',
    23: '黑龙江 ',
    31: '上海',
    32: '江苏',
    33: '浙江',
    34: '安徽',
    35: '福建',
    36: '江西',
    37: '山东',
    41: '河南',
    42: '湖北 ',
    43: '湖南',
    44: '广东',
    45: '广西',
    46: '海南',
    50: '重庆',
    51: '四川',
    52: '贵州',
    53: '云南',
    54: '西藏 ',
    61: '陕西',
    62: '甘肃',
    63: '青海',
    64: '宁夏',
    65: '新疆',
    71: '台湾',
    81: '香港',
    82: '澳门',
    91: '国外',
  };
  const birthday = `${ID.substr(6, 4)}/${Number(ID.substr(10, 2))}/${Number(
    ID.substr(12, 2)
  )}`;
  const d = new Date(birthday);
  const newBirthday = `${d.getFullYear()}/${Number(d.getMonth() + 1)}/${Number(
    d.getDate()
  )}`;
  const currentTime = new Date().getTime();
  const time = d.getTime();
  const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  let sum = 0;
  let i;
  if (!/^\d{17}(\d|X)$/i.test(ID)) {
    return false;
  }
  if (city[ID.substr(0, 2)] === undefined) {
    return false;
  }
  if (time >= currentTime || birthday !== newBirthday) {
    return false;
  }
  for (i = 0; i < 17; i++) {
    sum += ID.substr(i, 1) * arrInt[i];
  }
  const residue = arrCh[sum % 11];
  if (residue !== ID.substr(17, 1)) {
    return false;
  }
  return true;
}


export function checkTaiBaoCardId(value: string) {
  if (!value) return false;
  // const reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/;
  const reg = /^[H|M](\d{8}|\d{10})$/;
  return reg.test(value);
}

export function checkHKCardId(value: string) {
  if (!value) return false;
  const reg = /^([A-Z]\d{6,10}(\(\w{1}\))?)$/;
  return reg.test(value);
}

 

解析身份证,判断生日,性别,年龄

// 解析身份证信息
export function parseIdCard(value: string): any {
  let birthday, sex, age;
  if (checkIdCard(value)) {
    birthday = `${value.substring(6, 10)}-${value.substring(
      10,
      12
    )}-${value.substring(12, 14)}`;
    sex = parseInt(value.substr(16, 1)) % 2 == 1 ? '1' : '2';

    const myDate = new Date();
    const month = myDate.getMonth() + 1;
    const day = myDate.getDate();
    age = myDate.getFullYear() - value.substring(6, 10) - 1;
    if (
      value.substring(10, 12) < month ||
      (value.substring(10, 12) == month && value.substring(12, 14) <= day)
    ) {
      age++;
    }
  }

  return { birthday, sex, age };
}

 

posted @ 2025-07-28 15:43  喻佳文  阅读(20)  评论(0)    收藏  举报