首页 > 编程学习 > JavaScript - 通过居民身份证号码获取年龄和性别(函数封装)

前言

身份证号并非 “无规则” 数字,每一段都代表着持证公民的一些信息。

当程序拿到用户身份证号后,可 “帮助” 用户算出年龄、性别、出生日期、地区等信息,

计算规则

现在大部分都是二代身份证(依文章发布日期),如果程序严谨的话,通过位数做一二代身份证判断分支,最后分别进行处理。

身份证位数出生年份出生月份出生日期性别
15位(一代)7、8位9、10位11、12位15位 奇男偶女
18位(二代)7、8、9、10位11、12位13、14位17位 奇男偶女

函数封装

直接全部复制即可,Vue 项目的话,做一下函数写法改造即可。

为此封装了一个函数(方便调用),做了身份证号是否合法验证,如下代码所示:

/**
 * 通过身份证号获取年龄、性别
 * @description 验证参数合法性,获取信息并返回
 * @param {String} icard - 二代居民身份证号码
 * @return Object
 */
function getIcard(icard) {

  // 验证是否纯数字(直接退出函数并返回false)
  if(!(/^\d+$/.test(icard))){ return false }

  // 验证是否二代居民身份证(直接退出函数并返回false)
  if(icard.length != 18) { return false }

  // 要返回的最终信息(如果都为null则未获取到)
  const result = {
    gender: null,//性别
    age: null//年龄
  }
  
  // 收集必要信息
  icard.substring(6,10) + "-" + 
  icard.substring(10,12) + "-" +
  icard.substring(12,14);

  // 获取性别
  if(parseInt(icard.substr(16,1)) %2 == 1) {
    // 男性
    result.gender = '男'
  } else {
    // 女性
    result.gender = '女'
  }

  // 获取年龄
  var myDate = new Date()
  var month = myDate.getMonth() + 1
  var day = myDate.getDate()
  var age = myDate.getFullYear() - icard.substring(6, 10) - 1
  if(icard.substring(10,12) < month || icard.substring(10,12) == 
  month && icard.substring(12,14) <= day){ age ++; }
  //年龄
  result.age = age

  // return
  return result;
},

使用方法

注意:触发方式自选,如果是 <input> 输入框建议 @blur 焦点离开时触发。

// 取到的年龄和性别
const data = this.getIcard('130355199811093358')

// 如果data为false,则证明身份证不合法
if(data){
  console.log(data)//{gender: '女', age: 22}
}

写在后面

如果本篇获取的信息不满足于您的项目(比如还需要获取生日),

您可以根据 “计算规则” 自己手动增加代码。

Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000