首页 > 其他分享 >写一个验证身份证号的方法

写一个验证身份证号的方法

时间:2024-11-21 12:17:47浏览次数:1  
标签:const log 验证 idCard 身份证号 isValidIDCardConcise console false 方法

/**
 * 验证身份证号码是否有效
 * @param {string} idCard 身份证号码
 * @returns {boolean} 是否有效
 */
function isValidIDCard(idCard) {
  // 基本格式校验
  const idCardReg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$/;
  if (!idCardReg.test(idCard)) {
    return false;
  }

  // 校验码校验
  const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
  let sum = 0;
  for (let i = 0; i < 17; i++) {
    sum += parseInt(idCard[i]) * factor[i];
  }
  const checkCode = parity[sum % 11];
  return String(checkCode).toUpperCase() === idCard[17].toUpperCase();
}


// 使用示例
console.log(isValidIDCard('11010119900307001X')); // true
console.log(isValidIDCard('110101199003070011')); // false
console.log(isValidIDCard('123456789012345678')); // false
console.log(isValidIDCard('340823199306103214')); // true


//  更简洁的写法 (使用数组 reduce 方法)

function isValidIDCardConcise(idCard) {
    const idCardReg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$/;
    if (!idCardReg.test(idCard)) return false;

    const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    const parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
    const sum = idCard.slice(0, 17).split('').reduce((acc, val, index) => acc + parseInt(val) * factor[index], 0);
    return String(parity[sum % 11]).toUpperCase() === idCard[17].toUpperCase();
}

console.log(isValidIDCardConcise('11010119900307001X')); // true
console.log(isValidIDCardConcise('110101199003070011')); // false
console.log(isValidIDCardConcise('123456789012345678')); // false
console.log(isValidIDCardConcise('340823199306103214')); // true

代码解释:

  1. 正则表达式初步校验: ^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$ 用于检查身份证号码的基本格式,包括长度、开头数字以及日期的合法性。

  2. 加权因子计算校验码: 根据身份证号码的前17位数字,乘以对应的加权因子,然后求和。

  3. 校验码校验: 将计算出的和除以11取余,根据余数在parity数组中查找对应的校验码。将查找出的校验

标签:const,log,验证,idCard,身份证号,isValidIDCardConcise,console,false,方法
From: https://www.cnblogs.com/ai888/p/18560413

相关文章

  • 写一个判断数据类型的方法
    /***判断数据类型*@param{*}data需要判断类型的变量*@returns{string}返回数据类型字符串*/functiongetType(data){consttype=Object.prototype.toString.call(data);switch(type){case'[objectString]':return'String';case&......
  • 写一个加密字符串的方法
    /***加密字符串*@param{string}str需要加密的字符串*@param{string}key加密密钥*@returns{string}加密后的字符串*/functionencryptString(str,key){if(!str){return"";}try{//使用CryptoJS库进行AES加密constkeyUt......
  • 写一个方法去掉字符串中的空格
    有多种方法可以去除JavaScript字符串中的空格,以下是几种常见且有效的方法:1.使用trim()方法(去除字符串开头和结尾的空格):这是最常用的方法,它可以去除字符串开头和结尾的空格,但不影响字符串中间的空格。conststr="Hello,world!";consttrimmedStr=str.trim();......
  • SpringBoot开发——统计接口调用耗时的几种方法
    文章目录一、统计接口调用耗时的方法二、代码实现1、使用AOP统计接口调用耗时1.1引入依赖1.2创建切面类1.3测试接口2、使用SpringBootActuator2.1引入依赖2.2访问端点2.3配置端点3、使用过滤器统计接口调用耗时3.1定义过滤器类3.2启......
  • 已下载directⅩ没有找d3d11.dll如何处理?详细的处理方法及操作流程
    当你遇到d3d11.dll缺失或损坏的问题时,这通常意味着DirectX组件不完整或已经损坏。DirectX是一个由Microsoft开发的组件集合,用于处理任务,如图形渲染、视频播放等。下面是如何处理d3d11.dll问题的详细步骤:重新安装DirectX有时候,DirectX组件可能因为某些原因损坏或丢失......
  • 具体的restoreSnapshot方法
    好的,让我们详细分析restoreSnapshot方法。这个方法位于SnapshotServiceImpl类中,负责从快照中恢复指定的索引。以下是方法的详细分析:方法签名privatevoidrestoreSnapshot(StringrepositoryName,StringsnapshotName,List<String>indicesList,DatedelTime,Longid)t......
  • ExpressionTreeHelper 表达式树泛型委托拷贝方法
    varpeople=newPeople(){Id=11,Name="Richard",Age=31};intcount=1_000_000;varcommon=HiPerfTimer.Execute(()=>{for(inti=0;i<count;i++){varitem=newPeopleCopy(){......
  • 常见9种软件测试方法【定义、使用场景、优势、略势、不同点】
     一、功能测试1.定义功能测试是对软件功能进行验证的测试活动,依据功能需求规格说明书,检查软件系统的各项功能是否能正确运行,包括功能的准确性、完整性等方面。2.使用场景新软件功能开发完成时,确保功能符合预期。软件进行功能升级或改进后。3.优势直接对应需求:可直观......
  • 【springboot开发】SpringBoot中出入参增强的5种方法 : 加解密、脱敏、格式转换、时间
    1.使用@JsonSerialize和@JsonDeserialize注解2.全局配置Jackson的ObjectMapper3.使用@ControllerAdvice配合@InitBinder4.自定义HttpMessageConverter5.使用AOP进行切面编程结语在SpringBoot中,对接口的请求入参和出参进行自定义的增......
  • 最全亚马逊批量实时采集商品链接方法(图文详解),还能看市场集中度!
    第一步:准备关键词、类目ID、店铺ID、ASIN可以通过选关键词、选类目2种方式采集关键词,自己卡条件批量下载下来。第二步:了解以词挖品、类目top1万采集、畅销榜采集、店铺挖品、僵尸链接、asin采集等等以词挖品方法一以词挖品方法二以词挖品方法三以词挖品方法四......