Skip to content

utils

getInfoByIdCard

根据身份证获取生日、性别、年龄

typescript
/**
 * 根据身份证获取生日、性别、年龄
 * @param idCard
 * @returns {{birthday: string, isMan: boolean, age:number}|boolean}
 */
export const getInfoByIdCard = (idCard: string): { birthday: string; isMan: boolean; age: number } | boolean => {
  const getBirthDay = (birthStr: string) => {
    return `${birthStr.substring(0, 4)}-${birthStr.substring(4, 6)}-${birthStr.substring(6, 8)}`
  }
  const getBirthYear = (birthStr: string) => {
    return `${birthStr.substring(0, 4)}` // 获取出生年份
  }
  const isMan = (sexNumb: string) => {
    return !(Number(sexNumb) % 2 === 0) // 男
  }
  if (/^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$/.test(idCard)) {
    return {
      birthday: getBirthDay(`19${idCard.substring(6, 12)}`),
      isMan: isMan(idCard.substring(14, 15)),
      age: Number(new Date().getFullYear()) - Number(getBirthYear(`19${idCard.substring(6, 12)}`)),
    }
  } else if (
    /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(idCard)
  ) {
    return {
      birthday: getBirthDay(idCard.substring(6, 14)),
      isMan: isMan(idCard.substring(16, 17)),
      age: Number(new Date().getFullYear()) - Number(getBirthYear(idCard.substring(6, 14))),
    }
  }
  return false
}

Released under the MIT License.