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

下面是关于“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日

相关文章

  • JS判断非空至少输入两个字符的简单实现方法

    要实现JS判断非空至少输入两个字符的功能,可以使用以下几种方法: 方法一:使用正则表达式判断 使用正则表达式可以快速判断输入的字符串是否是非空且至少输入两个字符。具体步骤如下: 定义正则表达式:/^[^\s]{2,}$/ 解释正则表达式:以字符串开头,不能包含空格字符,长度至少为2 在JS代码中使用正则表达式匹配用户输入的字符串 以下是示例代码: const…

    node js 2023年6月8日
    00
  • JAVA使用HtmlUnit爬虫工具模拟登陆CSDN案例

    以下是使用HtmlUnit模拟登录CSDN的详细攻略。 准备工作 在开始操作之前,需要先安装好Java环境和HtmlUnit依赖。 安装Java环境:Java官网下载并安装即可。 安装HtmlUnit:在pom.xml文件中加入以下依赖即可。 <dependency> <groupId>net.sourceforge.htmlunit…

    node js 2023年6月8日
    00
  • JS正则替换掉小括号及内容的方法

    下面是JS正则替换掉小括号及内容的方法的完整攻略: 步骤一:使用正则表达式匹配小括号及其中内容 在默认情况下,正则表达式只能匹配文本的一部分,如果要匹配小括号或其中的内容,需要使用一些特殊字符。 () 用于匹配小括号。 (?:) 用于匹配小括号中的内容。 例如,要匹配字符串 (hello) 中的小括号及其中的内容,可以使用正则表达式 \((?:.*)\)。 …

    node js 2023年6月8日
    00
  • node.js中RPC(远程过程调用)的实现原理介绍

    下面是详细讲解“node.js中RPC(远程过程调用)的实现原理介绍”的完整攻略。 什么是RPC RPC(Remote Procedure Call)即远程过程调用,是一种计算机通信协议。它允许程序调用其他进程或者跨网络机器上的线程上的函数,而不需要程序员显式编写网络通信代码。 在RPC中,客户机调用服务器上的远程过程,就像本地调用一样。RPC框架会自动将数…

    node js 2023年6月8日
    00
  • 快速掌握Node.js中setTimeout和setInterval的使用方法

    以下是“快速掌握Node.js中setTimeout和setInterval的使用方法”的完整攻略: 一、介绍 在 Node.js 中,可以使用 setTimeout 或 setInterval 实现定时器的功能。setTimeout 用来设定一个定时器,在指定的时间间隔后执行一次指定的函数,而 setInterval 则用于重复执行函数。本篇攻略将详细讲解…

    node js 2023年6月8日
    00
  • Node.js实现注册邮箱激活功能的方法示例

    下面是 “Node.js实现注册邮箱激活功能的方法示例” 的完整攻略。 1. 前言 在我们开发一些网站应用时,常常需要实现用户注册,而为了避免有人随意使用网站,我们通常会要求用户进行邮箱激活。本篇攻略将介绍如何基于 Node.js 来实现注册邮箱激活功能。 2. 实现步骤 2.1 生成激活链接 在完成注册后,我们需要通过邮件向用户发送一封包含激活链接的邮件,…

    node js 2023年6月8日
    00
  • NodeJs内置模块超详细讲解

    下面是“NodeJs内置模块超详细讲解”的完整攻略。 NodeJs内置模块 NodeJs中有很多内置模块,包括文件系统、网络、加密、全局对象等等。这些内置模块可以帮助我们实现各种复杂的功能。我们来逐一介绍。 文件系统模块 文件系统模块通过NodeJs的fs模块来实现。它提供了一些常见的文件操作函数,比如读取、写入、删除文件等等。下面是一个简单的读取文件的示例…

    node js 2023年6月8日
    00
  • 超实用的JavaScript表单代码段

    当我们构建一个网站或者应用程序时,表单通常是至关重要的一部分。为了使表单更加美观、实用和易于使用,JavaScript可以帮助我们实现各种功能。 本文将介绍一些超实用的JavaScript表单代码段,帮助你改善表单的互动性并增强用户体验。具体步骤如下: 一、表单验证 表单验证是为了避免用户输入的数据不符合要求,从而增强表单的可靠性。下面的代码演示了一个简单的…

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