Node.js通过身份证号验证年龄、出生日期与性别方法示例

yizhihongxing

下面是关于“Node.js通过身份证号验证年龄、出生日期与性别方法示例”的完整攻略:

1. 需求分析

首先我们需要明确我们的需求,就是通过身份证号获取到对应的年龄、出生日期和性别这几个信息。身份证号通常有15位和18位两种格式,我们需要对这两种格式都进行处理。具体的需求分析可以如下:

  • 输入参数:身份证号(String类型)
  • 输出结果:年龄、出生日期和性别(Object类型)

2. 实现方法

2.1 获取身份证号中的信息

首先我们需要获取到身份证号中的信息,包括出生日期和性别。对于18位身份证号来说,前17位是数字,最后一位可能是数字也可能是X,表示性别的第17位是奇数还是偶数就能确定性别,出生日期则是前6位。对于15位身份证号来说,前6位是出生日期,接下来是3位序号,最后一位是校验位。我们可以通过正则表达式来获取出生日期和性别:

function getIdCardInfo(idCard) {
  let info = {};
  if (idCard.length === 15) {
    let reg = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
    let arr = idCard.match(reg);
    info.birth = `19${arr[2]}-${arr[3]}-${arr[4]}`;
    info.sex = arr[5] % 2 == 0 ? '女' : '男';
  } else if (idCard.length === 18) {
    let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$/;
    let arr = idCard.match(reg);
    info.birth = `${arr[2]}-${arr[3]}-${arr[4]}`;
    info.sex = arr[17] % 2 == 0 ? '女' : '男';
  }
  return info;
}

2.2 计算年龄

由于JavaScript中没有与日期相关的类型,我们需要使用第三方库来处理日期。我这里使用的是moment.js库来处理日期。计算年龄的方法就是当前年份减去出生年份,还需要判断出生月份和当前月份是否相等,如果相等再比较日期大小即可:

const moment = require('moment');

function calcAge(birthday) {
  const now = moment();
  const birth = moment(birthday, 'YYYY-MM-DD');
  let age = now.year() - birth.year();
  if (now.month() < birth.month() ||
      (now.month() == birth.month() && now.date() < birth.date())) {
    age--;
  }
  return age;
}

2.3 完整实现

将获取身份证号信息和计算年龄的方法结合起来,最终的实现代码如下所示:

const moment = require('moment');

function getIdCardInfo(idCard) {
  let info = {};
  if (idCard.length === 15) {
    let reg = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
    let arr = idCard.match(reg);
    info.birth = `19${arr[2]}-${arr[3]}-${arr[4]}`;
    info.sex = arr[5] % 2 == 0 ? '女' : '男';
  } else if (idCard.length === 18) {
    let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$/;
    let arr = idCard.match(reg);
    info.birth = `${arr[2]}-${arr[3]}-${arr[4]}`;
    info.sex = arr[17] % 2 == 0 ? '女' : '男';
  }
  return info;
}

function calcAge(birthday) {
  const now = moment();
  const birth = moment(birthday, 'YYYY-MM-DD');
  let age = now.year() - birth.year();
  if (now.month() < birth.month() ||
      (now.month() == birth.month() && now.date() < birth.date())) {
    age--;
  }
  return age;
}

function checkIdCard(idCard) {
  if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(idCard)) {
    return {
      isOk: false,
      errMsg: '身份证号格式错误'
    };
  }
  const info = getIdCardInfo(idCard);
  const age = calcAge(info.birth);
  return {
    isOk: true,
    age: age,
    birth: info.birth,
    sex: info.sex
  };
}

3. 示例说明

示例1:验证18位身份证号

我们来模拟一个身份证号:420625199210290773

console.log(checkIdCard('420625199210290773'));

输出结果:

{
  isOk: true,
  age: 28,
  birth: '1992-10-29',
  sex: '男'
}

示例2:验证15位身份证号

我们来模拟一个身份证号:130503670401001

console.log(checkIdCard('130503670401001'));

输出结果:

{
  isOk: true,
  age: 54,
  birth: '1967-04-01',
  sex: '女'
}

以上就是关于如何通过Node.js验证身份证号获取到年龄、出生日期和性别的完整攻略,希望可以帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js通过身份证号验证年龄、出生日期与性别方法示例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • VsCode与Node.js知识点详解

    VsCode与Node.js知识点详解 什么是VsCode VsCode是一款由微软开发的跨平台轻量级代码编辑工具,支持多种编程语言,如JavaScript、TypeScript、C#等等。VsCode 的主要特点包括快速响应、智能提示、代码片段、语法高亮、扩展性强等,凭借其丰富的插件库和良好的用户体验,已经成为许多开发者的首选编辑器。 什么是Node.js…

    node js 2023年6月7日
    00
  • node.js 全局变量的具体使用

    当我们编写Node.js代码时,我们经常需要在多个模块之间共享数据或者函数,这时候就需要用到Node.js的全局变量。 Node.js中的全局变量包括:__dirname、__filename、exports、module、process等。 下面将详细讲解全局变量的具体使用: 1. __dirname和__filename变量 __dirname和__fi…

    node js 2023年6月8日
    00
  • Highcharts+NodeJS搭建数据可视化平台示例

    下面给出Highcharts+NodeJS搭建数据可视化平台的完整攻略。 准备工作 安装NodeJS 首先,我们需要安装NodeJS。在官网上下载对应操作系统的安装包,然后安装即可。 安装Express 接着,我们需要安装Express。在命令行中执行以下命令: npm install express 安装Highcharts 最后,我们需要安装Highch…

    node js 2023年6月8日
    00
  • node+axios实现服务端文件上传示例

    下面是针对使用node和axios实现服务端文件上传的完整攻略。 1. 安装依赖 在开始代码实现之前,需要先安装一些必要的依赖包。这里我们需要下载express、body-parser和multer这三个包。其中,express用来搭建服务器,body-parser用于解析POST请求中的body,multer用于处理文件上传。 npm install ex…

    node js 2023年6月8日
    00
  • Node.js 缓冲区(Buffer)模块的方法及实例分析

    Node.js 缓冲区(Buffer)模块是 Node.js 提供的一个用于处理字节流数据的模块,它提供了一些方法可以让我们对数据进行操作。本文将在以下几个方面详细介绍 Node.js 缓冲区(Buffer)模块的方法及实例分析。 创建缓冲区 使用 Buffer.alloc() 方法来创建一个指定大小的缓冲区。 示例代码: const buf = Buffe…

    node js 2023年6月8日
    00
  • 深入理解Node内建模块和对象

    深入理解Node内建模块和对象需要我们具备以下知识: Node.js的内置模块列表 Node.js内置对象的使用方法和功能 Node.js的内置模块列表 Node.js提供了丰富的内置模块,可以用于处理不同的任务,包括操作文件系统、网络通信、加密、压缩等等。以下是Node.js内置模块的列表: assert:断言模块 buffer:缓存模块 child_pr…

    node js 2023年6月8日
    00
  • 详解Angular5/Angular6项目如何添加热更新(HMR)功能

    下面是详解Angular5/Angular6项目如何添加热更新(HMR)功能的完整攻略。 需要的前置条件 Angular CLI Angular5或Angular6项目 步骤一:安装相关依赖 首先我们需要安装@angularclass/hmr和webpack-bundle-analyzer插件。运行下面的命令进行安装: npm install –save-…

    node js 2023年6月8日
    00
  • js获取html页面节点方法(递归方式)

    当我们需要获取页面内的某个节点时,我们可以使用JavaScript对DOM树进行遍历,找到目标节点并返回。递归是一种逐级下降的方式,在DOM树上寻找目标节点。下面是详细的攻略: 核心思路 判断当前节点是否是目标节点,是的话则返回该节点 不是目标节点则遍历该节点的所有子节点,并依次调用自己,直到找到目标节点或子节点均为null时停止递归。 代码实现 funct…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部