`
SnailWong
  • 浏览: 183534 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

身份证号,出生日期等的js正则表达式验证

    博客分类:
  • web
阅读更多

1、简单的正则表达式:

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位的身份证,并且包含生日和校验位的验证。  
//如果有兴趣,还可以加上身份证所在地的验证,就是前6位有些数字合法有些数字不合法。

function isIdCardNo(num)
{  
          num
= num.toUpperCase(); 
        
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。  
          if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)))  
          {
               alert(
'输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。');
             
return false;
         }
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
//下面分别分析出生日期和校验位
var len, re;
len
= num.length;
if (len == 15)
{
re
= new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
var arrSplit
= num.match(re);

//检查生日日期是否正确
var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
var bGoodDay;
bGoodDay
= (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay)
{
          alert(
'输入的身份证号里出生日期不对!');  
          
return false;
}
else
{
//将15位身份证转成18位
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
          var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
           var arrCh
= new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
           var nTemp
= 0, i;  
            num
= num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
          
for(i = 0; i < 17; i ++)
          {
                nTemp
+= num.substr(i, 1) * arrInt[i];
           }
           num
+= arrCh[nTemp % 11];  
           
return num;  
}  
}
if (len == 18)
{
re
= new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
var arrSplit
= num.match(re);

//检查生日日期是否正确
var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
var bGoodDay;
bGoodDay
= (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay)
{
alert(dtmBirth.getYear());
alert(arrSplit[
2]);
alert(
'输入的身份证号里出生日期不对!');
return false;
}
else
{
//检验18位身份证的校验码是否正确。
//校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var valnum;
var arrInt
= new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh
= new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp
= 0, i;
for(i = 0; i < 17; i ++)
{
nTemp
+= num.substr(i, 1) * arrInt[i];
}
valnum
= arrCh[nTemp % 11];
if (valnum != num.substr(17, 1))
{
alert(
'18位身份证的校验码不正确!应该为:' + valnum);
return false;
}
return num;
}
}
return false;
}  
3、严格的验证:

<script>
var aCity
={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:"国外 "}

function cidInfo(sId){
var iSum
=0
var info
=""
if(!/^d{17}(d|x)$/i.test(sId))return false;
sId
=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地区";
sBirthday
=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d
=new Date(sBirthday.replace(/-/g,"/"))
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
if(iSum%11!=1)return "Error:非法证号";
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"":"")
}
document.write(cidInfo(
"380524198002300016"),"<br/>");
document.write(cidInfo(
"340524198002300019"),"<br/>")
document.write(cidInfo(
"340524197711111111"),"<br/>")
document.write(cidInfo(
"34052419800101001x"),"<br/>");
</script>

分享到:
评论
1 楼 chuyuan_china 2013-03-27  
感觉有点繁杂

相关推荐

    正则表达式 JS 身份证验证

    ### 正则表达式 JS 身份证验证详解 身份证号码在中国大陆地区具有唯一性,是个人身份的重要标识。为了确保信息安全和个人隐私保护,在很多应用系统中都需要对身份证号码进行合法性和格式性的验证。本文将详细阐述...

    js正则表达式校验数字、email、身份证号等

    js正则表达式校验数字、email、身份证号等

    正则表达式校验身份证号码

    本文将详细介绍如何使用正则表达式进行身份证号码的有效性和合理性验证。 #### 简单校验:正则表达式的使用 简单校验主要检查身份证号码是否为15位或18位,并且对于18位号码,最后一位可以是数字或大写“X”。这种...

    如何用javascript正则表达式验证身份证号码是否合法

    在用户注册页面有些需求要求的比较严格,需要对身份证验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。此篇文章主要是讲解如何用javascript正则表达式验证身份证号码是否合法,需要的朋友可以参考下

    JS正则表达式验证 常用的都有

    根据提供的文件信息,我们可以推断出此文档主要讨论的是JavaScript中的正则表达式验证方法以及一些其他相关的JavaScript功能。下面将详细介绍与标题“JS正则表达式验证 常用的都有”及描述中提到的知识点。 ### JS...

    javascript正则表达式表单验证大全

    ### JavaScript正则表达式在表单验证中的应用详解 在Web开发中,表单验证是确保数据质量和用户体验的重要环节。JavaScript正则表达式提供了一种强大的工具,用于前端数据校验,确保用户输入的数据格式正确无误。...

    JS使用正则表达式验证身份证号码

    // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(reg.test(card) === false) { alert&#40;...

    js正则表达式验证大全

    通过理解和掌握这些知识点,开发者可以编写出高效、准确的JavaScript正则表达式,实现各种复杂的验证需求。在实际项目中,应根据具体业务场景灵活运用,并结合错误处理机制,确保用户体验和数据安全。

    各种正则表达式验证

    **应用场景**:常用于验证用户输入的出生日期、预约日期等。 ##### 7. 邮箱验证 ```javascript this.reg.email=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; ``` **解析**:该正则表达式用于验证邮箱地址的...

    收集的一些js正则表达式

    这篇博客文章 "收集的一些js正则表达式" 提供了一些实用的JavaScript正则表达式示例,这将有助于开发者在实际项目中进行文本匹配、搜索、替换等操作。 首先,了解正则表达式的基础知识至关重要。正则表达式由一系列...

    IP 正则表达式验证

    您可能感兴趣的文章:javascript 手机号码正则表达式验证函数JS正则表达式验证数字代码JavaScript正则表达式验证身份证号码是否合法(两种方法)jquery正则表达式验证(手机号、身份证号、中文名称)邮箱地址正则...

    常用正则表达式大全.txt

    通过定义一组规则来识别文本中的特定模式,正则表达式被广泛应用于各种场景,如数据验证、搜索替换等。 ### 数字验证 1. **纯数字验证**:只允许输入纯数字。 - 正则表达式:`^[0-9]*$` - 示例:`12345` 2. **...

    JavaScript验证正则表达式大全.txtJavaScript验证正则表达式大全.txt

    根据提供的文件信息,本文将详细解释与JavaScript中的正则表达式相关的知识点,这些知识点主要涉及字符串验证、格式检查以及特定模式匹配等方面。 ### 正则表达式基础 在深入探讨具体的正则表达式之前,先简要回顾...

    验证控件:正则表达式大全

    正则表达式是一种强大的文本处理工具,广泛应用于数据验证、搜索和替换等场景。在编程语言如JavaScript中,正则表达式是进行字符串操作的重要手段。这篇文档“正则表达式大全”旨在汇总常用正则表达式模式,帮助...

    各种正则表达式验证有数字英文中文符号

    ### 正则表达式验证规则 #### 1. **任意非空字符串验证** ```regex Require:/.+/ ``` 此正则表达式用于匹配任何非空字符串,至少包含一个或多个字符。 #### 2. **电子邮件格式验证** ```regex Email:/^\w+([-+.]\w...

    正则表达式(基本包含所有验证的正则)

    正则表达式在数据验证、文本处理等方面有着广泛的应用。本文通过多个具体的示例介绍了正则表达式的使用方法及其应用场景,希望能帮助读者更好地理解和掌握这一工具。在未来的工作中,合理地运用正则表达式可以极大地...

    【JS常用代码】正则表达式验证

    本文将深入探讨正则表达式在JS中的应用,并基于给出的标题和描述,提供一些常见的正则表达式验证场景及其实现方法。 一、基本概念 1. **模式**:正则表达式模式是描述一组字符串的规则,例如`\d{3}-\d{4}`用于匹配...

Global site tag (gtag.js) - Google Analytics