身份证号码的正则表达式及验证详解(JavaScript,Regex)

在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案。本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案。

身份证号码说明

居民身份证号码,正确、正式的称谓应该是“公民身份号码”。根据【中华人民共和国国家标准 GB 11643-1999】中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

以北京市朝阳区一女性身份证号码为例,身份证号码所表示的含义如下图所示:

注:该身份证号码来源于国标【GB 11643-1999】。

下面我们就从零开始完成一个完整的身份证号码校验过程。

方案1 (简单) 1.1 分部规则

我们首先提出方案1,并分步做如下规则定义:

1.1.1 地址码规则:

地址码长6位

以数字1-9开头

后5位为0-9的数字

根据以上规则,写出地址码的正则表达式: /^[1-9]\d{5}/

1.1.2 年份码规则:

年份码长4位

以数字18,19或20开头

剩余两位为0-9的数字

根据以上规则,写出年份码的正则表达式: /(18|19|20)\d{2}/。如果不需要18开头的年份,可以去掉18。

1.1.3 月份码规则:

月份码长2位

第一位数字为0,第二位数字为1-9

或者第一位数字为1,第二位数字为0-2

根据以上规则,写出月份码的正则表达式: /((0[1-9])|(1[0-2]))/。

1.1.4 日期码规则:

日期码长2位

第一位数字为0-2,第二位数字为1-9

或者是10,20,30,31

根据以上规则,写出日期码的正则表达式 :/(([0-2][1-9])|10|20|30|31)/。

1.1.5 顺序码规则:

顺序码长3位

顺序码是数字

根据以上规则,写出顺序码的正则表达式 :/\d{3}/。

1.1.6 校验码规则:

校验码长1位

可以是数字,字母x或字母X

根据以上规则,写出校验码的正则表达式 :/[0-9Xx]/。

1.2 方案1正则表达式

综合以上6条规则,给出完整的正则表达式及测试程序如下:

var p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; //输出 true console.log(p.test("11010519491231002X")); //输出 false 不能以0开头 console.log(p.test("01010519491231002X")); //输出 false 年份不能以17开头 console.log(p.test("11010517491231002X")); //输出 false 月份不能为13 console.log(p.test("11010519491331002X")); //输出 false 日期不能为32 console.log(p.test("11010519491232002X")); //输出 false 不能以a结尾 console.log(p.test("11010519491232002a"));

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfwxy.html