正则表达式

您所在的位置:网站首页 身份证验证正则表达式 正则表达式

正则表达式

2024-07-12 10:32| 来源: 网络整理| 查看: 265

面试时经常会被问道如何判断是否为身份证号码????

首先要明白身份证号码的编码规则,然后根据编码规则去写正则表达式

身份证编码规则如下(身份证有15为何和18位,以18位身份证为例):

第1位和第2位:省,自治区,直辖市代码(有关取值可查看代码表);

第3位和第4位:地级市,盟,自治州代码(有关取值可查看代码表);

第5位和第6位:县,县级市,区代码(有关取值可查看代码表);

第7位到第10位:出生年(15位身份证出生年显示两位,

                           例如1992年出生,18位身份证显示1992,而15位则显示92);

第11位和第12位:出生月;

第13位和第14位:出生日;

第15位到第17位:顺序码,第17位若是男生则为单数,若是女生则为双数;

第18位:表示校验码,可以是0-9或者X;(15位身份证无校验码)

function   isIdCardNo(num) {     if   (isNaN(num))   {alert("输入的不是数字!");   return   false;}     var   len   =   num.length,   re;        if   (len   ==   15)         re   =   new   RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);     else   if   (len   ==   18)         re   =   new   RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);     else   {alert("输入的数字位数不对!");   return   false;}     var   a   =   num.match(re);     if   (a   !=   null)     {         if   (len==15)         {             var   D   =   new   Date("19"+a[3]+"/"+a[4]+"/"+a[5]);             var   B   =   D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];         }         else         {             var   D   =   new   Date(a[3]+"/"+a[4]+"/"+a[5]);             var   B   =   D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];         }         if   (!B)   {alert("输入的身份证号   "+   a[0]   +"   里出生日期不对!");   return   false;}     }     return   true; } isIdCardNo("330103780133103"); isIdCardNo("330103780123103"); isIdCardNo("330103197801231030");

 //更健壮的 地区和身份证的关系也判断到 还有性别 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?"男":"女") }  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3