javascript身份证验证正则与详细说明

网页特效身份证验证正则与详细说明
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>

这款是游戏网站上找到的

<script language="javascript" type="text/javascript">
function checkidcardfield(v_card) {
var reg = /^d{15}(d{2}[0-9x])?$/i;
if (!reg.test(v_card)) {
return false;
}
if (v_card.length == 15) {
var n = new date();
var y = n.getfullyear();
if (parseint("19" + v_card.substr(6, 2)) < 1900 || parseint("19" + v_card.substr(6, 2)) > y) {
return false;
}
var birth = "19" + v_card.substr(6, 2) + "-" + v_card.substr(8, 2) + "-" + v_card.substr(10, 2);
if (!isdate(birth)) {
return false;
}
}
if (v_card.length == 18) {
var n = new date();
var y = n.getfullyear();
if (parseint(v_card.substr(6, 4)) < 1900 || parseint(v_card.substr(6, 4)) > y) {
return false;
}
var birth = v_card.substr(6, 4) + "-" + v_card.substr(10, 2) + "-" + v_card.substr(12, 2);
if (!isdate(birth)) {
return false;
}
iw = new array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
isum = 0;
for (i = 0; i < 17; i++) {
ic = v_card.charat(i);
ival = parseint(ic);
isum += ival * iw[i];
}
ijym = isum % 11;
if (ijym == 0) sjym = "1";
else if (ijym == 1) sjym = "0";
else if (ijym == 2) sjym = "x";
else if (ijym == 3) sjym = "9";
else if (ijym == 4) sjym = "8";
else if (ijym == 5) sjym = "7";
else if (ijym == 6) sjym = "6";
else if (ijym == 7) sjym = "5";
else if (ijym == 8) sjym = "4";
else if (ijym == 9) sjym = "3";
else if (ijym == 10) sjym = "2";
var ccheck = v_card.charat(17).tolowercase();
if (ccheck != sjym) {
return false;
}
}
return true;
}
</script>

时间: 2024-10-29 18:11:45

javascript身份证验证正则与详细说明的相关文章

javascript 常用验证正则表达试

 switch (type) {                     case "empty":                         result = writeMsg(id, msg, (val == ''));                         break;                     case "number":                         //result = writeMsg(id, msg,

javascript 数字字符验证正则代码

<input type="text" name="textfield" onKeyPress="javascript:alert(event.keyCode);return flase"> 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/D/g,'')" onafterpaste="this.value=t

网页开发中常用javascript注册验证正则

 是否为数字.字母或下划线*/       function isnlu(ui){          var valid=/^w+$/;       return(valid.test(ui))    }       /*删除字符串中空格*/       user_pwd.replace(/s+/g,"");       /*    是否为邮箱地址    */       if((user_mail.indexof("@")<0)||(user_mail.in

JavaScript实现身份证验证代码_javascript技巧

18位身份证号码各位的含义 1-2位省.自治区.直辖市代码: 3-4位地级市.盟.自治州代码: 5-6位县.县级市.区代码: 7-14位出生年月日,比如19670401代表1967年4月1日: 15-17位为顺序号,其中17位男为单数,女为双数: 18位为校验码,0-9和X,由公式随机产生: 举例: 340523 1980 0101 0013这个身份证号的含义: 34为安徽省 05为马鞍山市 23为和县 19800101为出生日期(1980年1月1日) 001为顺序号(1为单数,代表为男性) 3

JS 日期验证正则附asp日期格式化函数_javascript技巧

javascript 日期验证正则 复制代码 代码如下: var pattern = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)

javascript密码验证_javascript技巧

本文为大家分享了javascript密码验证的实现方法,欢迎大家阅读.         javascript密码验证代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>密码验证</title> <script src="js/jquery-1.11.1.js"><

PHP实现身份证号正则验证(兼容15,18位)

  最近复习了正则表达式的使用,手痒痒就做了一份验证正则,身份证号验证(兼容15,18位) ,在注册验证的时候可以用上.   01 //比较菜鸟 第一次分享代码   02 //身份证号验证 03     protected function checkIdCard(){ 04         if(empty($_POST['idcard'])){ 05             return false; 06         } 07         $idcard = $_POST['idc

javascript身份证号码验证

https://github.com/oxcow/id-number-validator 版权声明: 关于<javascript身份证号码验证>的一切权利归作者@Leeyee所有: 非商用.非衍生; 如需转载需要注明来源于http://iyiguo.net/blog/2013/07/31/javascript-idcard-validate/ 15位身份证号码编码规则 18位身份证号码编码规则 校验规则 javascript编码实现 源代码 验证示例 15位身份证号码编码规则 ddddddyy

JavaScript 身份证号有效验证详解及实例代码_javascript技巧

最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个,代码还是用自己的舒服哈 JavaScript验证身份证号 <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>