• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

JS根据身份证获取出生日期、性别、年龄等方法

武飞扬头像
易纸烊
帮助3

前言

早期‘身份证号码’叫‘社会保障号’,为15位,1999年开始更名为公民身份证号码,即第二代身份证,为18位,且终身不变。本文方法均以18位身份证号为例。

获取出生日期

/**
 * @param no 接收的字符串(身份证号)
 * @param slipt 分割方式,默认:-
 * @param isDate 是否只显示月日,默认:false
 * @param isRreverse 是否为倒叙显示,如:日-月-年,默认:false
 * @returns string 脱敏后的字符串
 */
 
const getBirth = (no = '', slipt = '-', isDate = false, isRreverse = false) => {
  if (!no) return no
  const toStr = no.toString()
  const yearStr = toStr.substring(6, 10)
  const dateStr = `${toStr.substring(10, 12)}${slipt}${toStr.substring(12, 14)}`
  const reulst = isDate ? dateStr : `${yearStr}${slipt}${dateStr}`
  return isRreverse ? reulst.split(slipt).reverse().join(slipt) : reulst
}

需求一:身份证号:12010120210622207X;显示为:2021-06-22

getBirth('12010120210622207X')

测试结果: 学新通

需求二:身份证号:12010120210622207X;显示为:2021/06/22

getBirth('12010120210622207X','/')

测试结果: 学新通

需求三:身份证号:12010120210622207X;显示为:06-22

getBirth('12010120210622207X','-',true)

测试结果: 学新通

需求四:身份证号:12010120210622207X;显示倒叙:22/06/2021

getBirth('12010120210622207X','/','',true)

测试结果: 学新通

获取性别方法

const getSex = (no = '') => {
  if (!no) return no
  const toStr = no.toString()
  if (toStr.length < 17) return no
  return Number(toStr.substring(16, 17)) % 2 ? '男' : '女'
}

使用方式:

getSex('12010120210622207X')

测试结果: 学新通

获取年龄

调用此方法的时候,需要依赖于获取出生日期方法;

const getAge = (no = '') => {
  if (!no) return no
  const toStr = no.toString()
  const birth = new Date(getBirth(toStr))
  const today = new Date()
  let age = today.getFullYear() - birth.getFullYear()
  if (
    today.getMonth() < birth.getMonth() ||
    (today.getMonth() == birth.getMonth() && today.getDate() < birth.getDate())
  ) {
    age--
  }
  return age
}

使用方式:

getAge('12010120210622207X')

测试结果: 学新通

判断是否符合年龄

/**
 * @param no 接收的字符串(身份证号)
 * @param targetAge 目标年龄,默认:18
 * @returns boolean 是否满足年龄
 */
const isMeetAge = (no = '', targetAge = 18) => {
  if (!no) return no
  return getAge(no) <= Number(targetAge)
}

需求一:身份证号:12010120210622207X;是否成年(年满18岁为成年)

isMeetAge('12010120210622207X') // ture 代表小于目标年龄,未成年;false 代表大于等于满足目标年龄,已经成年

测试结果: 学新通

需求二:身份证号:120101193308025435;是否小于60周岁

isMeetAge('120101193308025435', 60)

测试结果: 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfheeek
系列文章
更多 icon
同类精品
更多 icon
继续加载