JS前后端实现身份证号验证代码解析

下面是“JS前后端实现身份证号验证代码解析”的完整攻略。

前言

身份证号是人们最常用的个人身份证明,因此在各个业务场景中,我们经常需要对输入的身份证号进行格式验证。本文将介绍如何使用 JavaScript 在前后端实现身份证号验证,帮助开发者更好地应对业务需求。

方案概述

实现身份证号验证的主要过程如下:

  1. 在前端通过 JavaScript 判断用户输入的身份证号是否符合规范;
  2. 将用户输入的身份证号传递至后端进行二次验证;
  3. 后端利用正则表达式和校验码规则等方式对身份证号进行验证;
  4. 返回验证结果给前端。

前端验证代码示例

我们可以在前端利用正则表达式判断用户输入的身份证号是否符合规范。下面是一个简单的代码示例:

function checkIdNumber(idNumber) {
  // 18位身份证号正则表达式验证
  var reg = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([0-2]\d|3[01])\d{3}[\dX]$/;
  if (!reg.test(idNumber)) {
    return false;
  }
  return true;
}

上述代码中,checkIdNumber 函数利用正则表达式对输入的身份证号进行验证。该正则表达式匹配的是 18 位身份证号的格式。其中,

  • ^[1-9]\d{5} 表示以非零开头的六位数字开始;
  • (19|20)\d{2} 表示出生年份的范围为 1900 到 2099 年;
  • (0\d|1[0-2])([0-2]\d|3[01]) 表示出生月份和日期的范围;
  • \d{3}[\\dX] 表示最后一位为数字或 X,用来校验身份证号的最后一位验证码。

如果输入的身份证号匹配该正则表达式,则返回true,否则返回false

示例代码中只验证了身份证号是否符合格式规范,而未校验身份证号的真实性。为了更加准确地判断身份证号的真实性,我们还需要在后端进行二次验证。

后端验证代码示例

在后端通过身份证号验证时,我们需要使用正则表达式和身份证号中的各个字段来判断其真实性。下面是一个使用 JavaScript 实现的身份证号校验函数示例:

function checkIdNumber(idNumber) {
  // 长度验证
  if (idNumber.length != 18) {
    return false;
  }

  // 地区码验证
  var areaCode = idNumber.substr(0, 2);
  var allAreaCodes = [
      "11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41","42","43","44","45","46","50","51","52","53","54","61","62","63","64",
      "65","71","81","82","91"
  ];
  if (allAreaCodes.indexOf(areaCode) < 0) {
    return false;
  }

  // 年月日验证
  var year = parseInt(idNumber.substr(6, 4));
  var month = parseInt(idNumber.substr(10, 2));
  var day = parseInt(idNumber.substr(12, 2));
  var date = new Date(year, month - 1, day);
  if (
    date.getFullYear() != year ||
    date.getMonth() + 1 != month ||
    date.getDate() != day
  ) {
    return false;
  }

  // 校验码验证
  var checkCode = idNumber.substr(17, 1);
  var idNumberWithoutCode = idNumber.substr(0, 17);

  var weightedFactors = [
    7,
    9,
    10,
    5,
    8,
    4,
    2,
    1,
    6,
    3,
    7,
    9,
    10,
    5,
    8,
    4,
    2,
  ];
  var checkCodeValues = [
    "1",
    "0",
    "X",
    "9",
    "8",
    "7",
    "6",
    "5",
    "4",
    "3",
    "2",
  ];
  var weightedSum = 0;
  for (var i = 0; i < idNumberWithoutCode.length; i++) {
    weightedSum +=
      parseInt(idNumberWithoutCode[i]) * weightedFactors[i];
  }
  var modValue = weightedSum % 11;
  if (checkCodeValues[modValue] != checkCode) {
    return false;
  }

  return true;
}

上述代码中,首先对身份证号长度进行验证,判断其是否为 18 位。然后,对身份证号中的地区码进行验证,判断其是否为有效的行政区划代码。接下来,对身份证号的出生日期进行验证,判断其是否为有效的日期。最后,使用身份证号前 17 位数和相应的权值因子进行校验码计算,核对身份证号的校验码是否正确。

该函数通过判断身份证号各字段的真实性,实现了对身份证号真实性的校验。

结论

身份证号验证是业务中经常需要用到的功能。本文通过前后端结合的方式实现了身份证号的验证,为开发者实现该功能提供了参考。开发者可以根据业务需求,选择前端、后端或前后端结合的方式来实现身份证号验证。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS前后端实现身份证号验证代码解析 - Python技术站

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

相关文章

  • 详解从react转职到vue开发的项目准备

    下面我会给出“详解从React转职到Vue开发的项目准备”的完整攻略,并且采用Markdown的标准格式,以方便阅读和理解。 前言 React和Vue是现在比较热门的前端框架,而React和Vue之间的语法又有一定的差异,所以,如果需要从React转职到Vue开发,需要在项目准备的时候做出一些调整。下面,我会介绍如何在项目准备的时候做好转职前的准备工作。 调…

    JavaScript 2023年6月11日
    00
  • JavaScript中Function与Object的关系

    JavaScript中Function与Object的关系 在JavaScript中,Function和Object的关系是非常密切的,因为Function就是一种特殊的Object。在JavaScript中,一切皆为对象,不仅包括原始类型(如数字、字符串),也包括函数。 Function是Object的一个子类 在JavaScript中,Function也…

    JavaScript 2023年5月27日
    00
  • JS 中document.URL 和 windows.location.href 的区别

    JS 中 document.URL 和 window.location.href 的区别有以下几点: 1. 基本概念 document.URL 和 window.location.href 都是用来获取当前网页的 URL 地址。它们是 window 对象的属性,可以通过 window.document.URL 和 window.location.href 的…

    JavaScript 2023年6月11日
    00
  • JavaScript常用数组元素搜索或过滤的四种方法详解

    JavaScript常用数组元素搜索或过滤的四种方法详解 在JavaScript编程中,经常会对数组进行搜索或者过滤操作,这篇文章将向您介绍JavaScript中常用的四种搜索或过滤数组元素的方法。 1. find()方法 该方法用于搜索数组中符合条件的元素,找到则返回该元素值,否则返回undefined。遍历数组,找到符合条件的元素即终止遍历,该方法接收一…

    JavaScript 2023年5月27日
    00
  • JavaScript显式数据类型转换详解

    JavaScript显式数据类型转换详解 在 JavaScript 中,数据类型转换是非常常见的操作。一般情况下,有两种转换方式:显式转换和隐式转换。本文将详细讲解显式数据类型转换的相关知识。 什么是显式数据类型转换? 所谓显式数据类型转换,就是使用一种特定的方法,将某个数据类型强制转换为另一种数据类型。显式转换是由程序员自行控制的,常见的显式数据类型转换函…

    JavaScript 2023年5月28日
    00
  • 使用AngularJS和PHP的Laravel实现单页评论的方法

    使用AngularJS和PHP的Laravel实现单页评论的方法 概述 本攻略将介绍如何使用AngularJS和PHP的Laravel框架实现单页评论,并且数据是实时响应的。通过本攻略,读者可以学习到AngularJS在前端的应用,以及Laravel框架在后端的应用。 前端实现 1. 引入AngularJS 在页面中引入AngularJS的JS文件,可以从A…

    JavaScript 2023年6月11日
    00
  • JavaScript基础之AJAX简单的小demo

    当创建Web应用程序时,需要异步处理与服务器的交互。这就是为什么Ajax对于现代Web开发至关重要。在这个简单的AJAX小demo中,我们将通过一个实际的例子学习AJAX。 1. AJAX的基本知识 AJAX全称“异步JavaScript和XML”,是一种创建快速动态Web内容的技术。通过AJAX,Web应用程序可以在不重新加载页面的情况下向Web服务器发送…

    JavaScript 2023年5月28日
    00
  • 利用js将ajax获取到的后台数据动态加载至网页中的方法

    为了将ajax获取到的后台数据动态加载到网页中,我们可以使用JavaScript来完成以下步骤: 创建XMLHttpRequest对象 我们首先需要创建一个XMLHttpRequest对象,该对象可以向后端服务器发送请求并接收响应。我们可以使用XMLHttpRequest.open()函数来指定请求的方式(GET或POST)、URL以及异步标志位。可以使用X…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部