正则表达式之完美18位身份证号

匹配18位身份证号,正则表达式如下:

/^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/

说明:现在身份证号都已经是18位了,没必要再去考虑匹配15位。

18位身份证号组成:6位地区号+4位年+4位月日+3位编号+1位新生成编号

逻辑:

1)6位地区号:首位非0,后五位数字。对应正则:[1-9][0-9]{5}

2)4位年:19或20开头,后两位数字。对应正则:(19|20)[0-9]{2}

3)4位月日:

  i)大月31天。对应正则:(01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)

  ii)小月30天。对应正则:(04|06|09|11)(0[1-9]|[1-2][0-9]|30)

  iii)2月28天或29天。对应正则:02(0[1-9]|[1-2][0-9])

4)3位编号:三位数字。对应正则:[0-9]{3}

5)1位新生成编号:数字或x。对应正则:([0-9]|x|X)

完美的正则依然有它的缺点:

1)未匹配闰年

2)未匹配前三位地区编号是否存在

时间: 2024-08-01 16:52:07

正则表达式之完美18位身份证号的相关文章

18位身份证号验证及信息获取

止乎于分享! IDCode18 = { validate: function (value) { if (value.length != 18) return false; var value = value.toLowerCase(); var sum = 0, v = '10x98765432', w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], a = '11,12,13,14,15,21,22,23,31,32,33,3

用DELPHI函数判断是否有效18位身份证号

uses DateUtils; const  IntMultiplication: Array[1..17] Of Integer=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //函数名:IsRightID//参数:sID,身份证号码 (输入)//      sSex,性别       (输出)//      age,年龄        (输出)//返回值:sID是标准身份证号,返回OK,否则返回相应信息function IsRightID(sID:string

PHP隐藏身份证号中间四位(适用老版15位与18位身份证号)

// $message['idcard'] 为数据库查出来的身份证号码,若位数不符合身份证位数则会显示“身份证位数不正常” <? echo strlen($message['idcard'])==15?substr_replace($message['idcard'],"****",8,5):(strlen($message['idcard'])==18?substr_replace($message['idcard'],"****",8,7):"身

中国居民18位身份证号验证方法,Java算法实现

public static boolean validate18Idcard(String idcard){ if(idcard == null ) { return false; } if(idcard.length()!=18) { return false; } char [] id =idcard.toCharArray(); int i, sum, n; for (sum = i = 0; i < 17; i++){ sum += ((1 << (17 - i)) % 11)

python操作redis之随机生成18位身份证号码

写一个随机生成身份证号的程序,输入多少条就产生多少个,?把产生完的数据写到redis里面,key用哈希类型?Xiaohei 410881198312031241 其中配置文件confsetting.py里的常量有: # 系统常量,包含: # LAST_NAME: 姓 # FIRST_NAME: 名 # STATE_CODE:全国大陆地区及编码 REDIS_IP = '172.16.2.163' RedisIp REDIS_PORT = 6379 REDIS_PASSWD = '222333' R

18位身份证验证--java实现,正则表达式

简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card)(2)preg_match("/^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3}) (\d|X)?$/",$id_card)(3)preg_match("/(^\d{15}$/)|(\d{17}(?:\d|x|X)$/),$id_card) 2.复杂并且严格一些的

15/18位身份证号码验证的正则表达式总结(详细版)

前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM dd 375 0     十八位 xxxxxx    yy MM dd   75 0     十五位 地区: [1-9]\d{5} 年的前两位: (18|19|([23]\d))            1800-2399 年的后两位: \d{2} 月份: ((0[1-9])|(10|11|12)) 天

js验证15位或18位身份证

本篇文章是本人在网上搜集了一些验证,然后又个人进行一定修改的关于身份证的验证,欢迎修改指正..... function IdCardValidateRule(idCard) { var tip;    //1.传入15位或者18位身份证号码,18位号码末位可以为数字或X    idCard = idCard.toUpperCase();    //2.去掉身份证的左右空格    idCard = trim(idCard);    //3.判断输入的身份证长度    if (!(/(^\d{15}

C#实现的18位身份证格式验证算法

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11643-1999<公民身份号码>为GB11643-1989<社会保障号码>的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999<公民身份号码>从实施之日起代替GB11643-1989.GB11643-1999<公民身份号码>主要内容如