首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 正则校验身份证号码

在JavaScript中,使用正则表达式来校验身份证号码是一种常见的方法。中国的身份证号码由18位数字组成,前17位是基本信息,最后一位可以是数字或者字母X(表示10)。以下是一个用于校验身份证号码的正则表达式示例:

代码语言:txt
复制
function validateIDCard(idCard) {
  const regex = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$/;
  return regex.test(idCard);
}

// 使用示例
console.log(validateIDCard('11010519491231002X')); // 应该返回 true
console.log(validateIDCard('110105194912310021')); // 应该返回 false,因为最后一位应该是X或数字

这个正则表达式的组成部分解释如下:

  • ^[1-9]:第一位数字不能是0。
  • \d{5}:接下来的5位是地区码。
  • (18|19|20)\d{2}:年份部分,可以是1800-2099年。
  • (0[1-9]|1[0-2]):月份部分,01-12月。
  • (0[1-9]|[12]\d|3[01]):日期部分,01-31日。
  • \d{3}:顺序码。
  • (\d|X|x)$:校验码,可以是数字或者字母X/x。

优势

  • 快速:正则表达式可以在短时间内完成校验。
  • 简洁:用一行代码就可以实现复杂的校验逻辑。

应用场景

  • 用户注册时校验身份证号码格式。
  • 在线表单提交前的客户端校验。
  • 数据清洗和预处理时验证身份证号码的有效性。

注意事项

  • 上述正则表达式只校验格式,不校验地区码、出生日期的有效性以及校验码的正确性。
  • 如果需要更严格的校验,可以结合地区码数据库、出生日期范围检查以及校验码算法(如ISO 7064:1983.MOD 11-2)进行综合校验。

校验码计算示例: 校验码的计算涉及到权重因子和模运算,具体算法如下:

  1. 权重因子为:[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  2. 将身份证号码前17位与权重因子对应相乘后求和。
  3. 将求和结果除以11得到余数。
  4. 根据余数查找对应的校验码:[1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]

如果需要实现完整的身份证号码校验(包括校验码),可以参考以下代码:

代码语言:txt
复制
function calculateCheckCode(idCard17) {
  const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  let sum = 0;
  for (let i = 0; i < 17; i++) {
    sum += parseInt(idCard17[i], 10) * weights[i];
  }
  return checkCodes[sum % 11];
}

function validateIDCardFull(idCard) {
  if (!validateIDCard(idCard)) {
    return false;
  }
  const checkCode = calculateCheckCode(idCard);
  return checkCode === idCard[17].toUpperCase();
}

// 使用示例
console.log(validateIDCardFull('11010519491231002X')); // 应该返回 true

这段代码首先使用之前的正则表达式检查格式,然后计算校验码并与身份证号码的最后一位进行比较,以确保身份证号码的完全有效性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • js正则表达式校验金额-js正则表达式简单校验方法

    下面就js正则表达式的校验带来内容分享,同时要考虑在js中支持的类型。   ...1.常见js正则校验   (1)校验密码强度   密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。   ^(?=.d)(?=.[a-z])(?=....[a-z]{2,4}){1,3}$/; return reg.test(str);}   到此这篇关于js正则表达式简单校验方法的文章就介绍到这了,更多相关js正则表达式校验内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持...js 正则表达式校验?   <   js验证密码的正则表达式。   完整的js正则表达式:   //强:字母+数字+特殊字符^(?![a-zA-z]+$)(?!\d+$)(?![!...@#$%^&*]+$ //中:字母+数字js正则表达式校验金额js正则表达式校验金额,字母+特殊字符,数字+特殊字符   ^(?![a-zA-z]+$)(?!\d+$)(?![!

    9K20

    校验身份证号码

    之前在做项目的时候遇到了需要校验身份证号码,最初始的想法就是校验一下是否数字还有就是校验长度,后来想到有的身份证号的最末尾数字是X,于是又加入了一层判断末尾数为X的判断。...于是就在网上搜了一下,发现身份证号码是有规律和算法的,下面来看一下 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成...下面是正则表达式: 出生日期1800-2099  (18|19|20)?... 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1 有了上面的算法就产生了如何利用js...来校验身份证号码的算法了,下面请看代码 function isIdCard(cardid) { //身份证正则表达式(18位) var isIdCard2 = /^[1-

    2.6K32

    身份证号码校验算法

    1、数字含义 中国大陆第二代身份证号码由18位数据或字母组成,每位数据都有特定的含义,结果如下: 每组数字都有不同的含义: 第1至2位数字代表所在省(直辖市、自治区)的代码; 第3至4位数字代表所在地级市...也就是说身份证号码不是随便产生的,它是用来检验身份的正确性。在没有全国个人身份证信息库时。可以通过检验码来校验身份证的正确性。...校验码由0-9的数据和字母X组成,其实X表示10(这并不是英文字母X,而是希腊数字10的缩写)。是由号码编制单位按统一的计算公式计算出来的,校验身份证号码正确性也是通过这个公式实现。...计算出S后再用S对11取余,根据余数确定校验位数字,对照表如下: 比如例子中的身份证号计算出来的S为189,对11取余结果为2,查表2对应的校验码为X,所以该身份证号最后一位应该为X。...= 18: raise TypeError(u'请输入标准的第二代身份证号码') check_num = 0 for index, num in enumerate(num_str

    3.3K90

    js手机号正则校验_正则表达式验证手机号码格式

    这篇文章主要介绍了2022手机号码JS正则表达式验证实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下​ 概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符...简介 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个...正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。 前端的正则表达式验证往往是最繁多最复杂的,所以整理了一些最近自己常用的正则表达式,希望能对大家有所帮助!

    5.8K32

    js正则表达式校验金额-正则表达式排除指定字符串

    阅读目录   ​​回到顶部​​   查找不以baidu开头的字符串   baidu.com   sina.com.cn   正则:^(?!...我们最容易想到的就是下面的正则:   ^3+$ 这种写法看起来是那么回事,但是排除型字符组排除的是i和f两个字符,而不是if这个字符串,所以这个正则表达式匹配的是那些既没有i字符也不包含f字符的字符串。...if)需要匹配一个位置,这个位置的后面不能是ifjs正则表达式校验金额,这个时候正好位置在b字符的后面,符合匹配条件,紧接着匹配行尾,到这里整个全局匹配成功。   ...对于正则表达式^.(?!abc).$怎么能让第一个.*匹配到 中的的问题。   ...第二种情况就是有f字符,但是我们要求此时f的前面不能是ijs正则表达式校验金额,所以在有f和没有f两种情况都考虑到的情况下,这个正则就应该可以满足所有的情况了。

    2.1K50

    js正则小结

    1,\ 斜杠用于转义,在js正则里,只有一些元字符(*,?,.等)和\本身需要转义,其他的不需要转义,如果其他的字符前面使用了\,可能会产生负面影响,比如\b,\t这些有特殊含义的转义。...此外,在js正则中,\还有一个用处在于使用new RegExp()形式创建正则对象时,比如new RegExp('a\*a'),其中*是乘以的意思,js引擎在解析该正则表达式字符串时,会消耗掉这个斜杠,...2 ^ 该元字符比较简单,就是表示该正则是从字符串的首字符开始匹配的,有一个地方需要注意的是,如果该正则表达式加了m标记时,匹配到了行分隔符的时候就会结束。然后会在下一行继续匹配。...$n ()代表捕获分组,x代表的表达式所匹配的内容可以在x所有的正则中或者其他地方使用。...$&是一个特殊的变量,他代表是整个正则表达式匹配到的结果。也就是xy。 7 (?:x) 非捕获分组,也就是()中的表达式捕获到分组不可在其他地方使用。'x'.replace(/(?

    7.7K50

    揭开身份证验证的神秘面纱

    正则验证身份证号码 HTML5学堂:曾经一直觉得用正则验证身份证号码是很简单的~但是,当真正挖掘身份证号码的规则之后,才发现,想要写好一个正则验证也没有那么容易。...此时将0与身份证号的最后一位(2)做比较,很明显,错误,那么也证明了这个号码是我瞎编的了…… 验证身份证号码的正则如何写?...2) yyyymmdd: 出生年(四位年)月日,前四位是年份,没啥可说的,月份只能是01~12,日期只能是01~31 3) xxx:三位数字 4) y: 校验码,0~9以及X(有时有人会写成x) 相对应的正则出炉喽...于是乎,完整匹配身份证号码的正则华丽丽的诞生了~~~ var reg = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2]\d)|(3...别急,往下接着看~~~ 使用JS增强号码的可控性 利利此处采用的是返回对象的设置方式,主要是便于获取完整的信息,需要注意的就是要在返回时提供比较合理的API了,不然对方是看不懂滴~~~ 我们希望用户通过调用验证身份证号码的方法

    1.9K50

    用Python写一个身份证号码校验系统

    这是一个用Python开发的GUI实战项目:居民身份证信息校验系统 一、总体介绍 本项目使用Tkinter作为GUI模块,充分利用Python面向对象的思想,开发一款实现身份证号码校验的应用程序。...以上,如果我们输入一个正确的身份证号码,系统可以正常解析;但是篡改其中一位的话,校验结果直接显示无效;如果少输入一位的话,系统会提示“请输入18位”。 二、认识身份证号码 身份证号码的构成如下: ?...检查校验码 (1) 对身份证号码进行切片 首先我们把获取到的身份证号码分成地区码、生日码、顺序码、校验码,四个部分,存储在列表id_list[]中。...身份证号码输入位数不足的情况 情况二:最后一位校验位错误(本来是7我们故意输入8) ? 身份证号码最后一位故意输错的情况 情况三:输入正确的身份证号码的情况 ?...输入正确的身份证号码的情况 最后 本项目利用Tkinter开发了一个身份证号码校验系统,能够识别用户输入的身份证号码的有效性,并且解析身份证号码的地区、出生日期、性别等有效信息,感兴趣的小伙伴可以直接后台私信

    2.9K50
    领券