现在的位置: 首页 > 综合 > 正文

js对身份证来进行校验

2013年12月02日 ⁄ 综合 ⁄ 共 4520字 ⁄ 字号 评论关闭
  1. //身份证号码由15位升到18位  
  2.   
  3. function idCode15To18(sCode15)  {  
  4.   
  5.     //alert("start");  
  6.   
  7.     var arrVerifyCode = [1,0,"x",9,8,7,6,5,4,3,2];  
  8.   
  9.     var Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];  
  10.   
  11.         var i=0,sum=0,code;  
  12.   
  13.         var IDCode = sCode15.substr(0,6)+"19"+sCode15.substr(6);  
  14.   
  15.         //alert (IDCode);  
  16.   
  17.         // 计算校验位,前 17位加权求和,然后除以11取模  
  18.   
  19.         for (i = 1; i <=IDCode.length; i++) {  
  20.   
  21.             //alert(IDCode.substr(i - 1, 1));  
  22.   
  23.             sum = sum + Wi[i - 1]*parseInt(IDCode.substr(i - 1, 1));  
  24.   
  25.         }  
  26.   
  27.         //sum=14;         
  28.   
  29.         sum = sum%11;  
  30.   
  31.         return IDCode+arrVerifyCode[sum] ;        
  32.   
  33.   
  34.   
  35. }  
  36.   
  37. function checkId(pId){  
  38.   
  39.     var arrVerifyCode = [1,0,"x",9,8,7,6,5,4,3,2];  
  40.   
  41.     var Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];  
  42.   
  43.       
  44.   
  45.     if(pId.length != 15 && pId.length != 18)    return "身份证号共有 15 码或18位";  
  46.   
  47.       
  48.   
  49.     var Ai=pId.length==18?pId.substring(0,17):pId.slice(0,6)+"19"+pId.slice(6,16);  
  50.   
  51.     if (!/^/d+$/.test(Ai)) return "身份证除最后一位外,必须为数字!";  
  52.   
  53.     var yyyy=Ai.slice(6,10),mm=Ai.slice(10,12)-1,dd=Ai.slice(12,14);  
  54.   
  55.     var d=new Date(yyyy,mm,dd),year=d.getFullYear(),mon=d.getMonth(),day=d.getDate(),now=new Date();  
  56.   
  57.     if (year!=yyyy || mon!=mm || day!=dd || d>now || now.getFullYear()-year>140) return "身份证输入错误!";  
  58.   
  59.     for(var i=0,ret=0;i<17;i++)  ret+=Ai.charAt(i)*Wi[i];      
  60.   
  61.     Ai+=arrVerifyCode[ret %=11];       
  62.   
  63.     return pId.length ==18 && pId.toLowerCase() != Ai?"身份证最后一位校验失败,身份证输入错误!应该是"+arrVerifyCode[ret %=11]+"请您仔细检查。":Ai;  
  64.   
  65. };  
  66.   
  67. ====================================================================  
  68.   
  69. if(form1.sfzhm.value.trim()==""){  
  70.   
  71.             alert("身份证号码不能为空");   
  72.   
  73.             form1.sfzhm.focus();  
  74.   
  75.             return false;  
  76.   
  77.         }else{  
  78.   
  79.   
  80.   
  81.             //根据所在地区、性别、出生日期来校验身份证号码的正确性  
  82.   
  83.             var tempSfzhm =     form1.sfzhm.value.trim();  
  84.   
  85.   
  86.   
  87.             tempSfzhm = checkId(tempSfzhm);  
  88.   
  89.             tempSfzhm = tempSfzhm.toLowerCase(); //这个入口已经自动将身份证号码转换为小写。  
  90.   
  91.             //下面的判断有问题  
  92.   
  93.               
  94.   
  95.             //tempSfzhm.length==18 且最后一位是x,那么判断就会失败!  
  96.   
  97.             //alert(tempSfzhm.length==18 && tempSfzhm.substr(17,1)=='x');  
  98.   
  99.               
  100.   
  101.             if((!(tempSfzhm.length==18 && tempSfzhm.substr(17,1)=='x' )) && isNaN(tempSfzhm)){  
  102.   
  103.                 alert("身份证号码错误!"+tempSfzhm);      
  104.   
  105.                 form1.sfzhm.focus();  
  106.   
  107.                 return false;  
  108.   
  109.             }else{  
  110.   
  111.                     var id=String(tempSfzhm);  
  112.   
  113.                     if(id.length==15){  
  114.   
  115.                         id=idCode15To18(id);      
  116.   
  117.                     }  
  118.   
  119.                       
  120.   
  121.                     //alert(id);  
  122.   
  123.                     var desSex = form1.xb.value.trim(); //性别  
  124.   
  125.                     var desSzdq = form1.szdq.value.trim();//所在地区  
  126.   
  127.                     var desCsrq = form1.csrq.value.trim();//出生日期      
  128.   
  129.                                           
  130.   
  131.                     var tempSex=id.slice(14,17)%2?"男":"女";  
  132.   
  133.                     if(tempSex=="男"){  
  134.   
  135.                         tempSex = "1";    
  136.   
  137.                     }else{  
  138.   
  139.                         tempSex="0";      
  140.   
  141.                     }  
  142.   
  143.                     var tempCsrq =id.substr(6,4)+"/"+id.substr(10,2)+"/"+id.substr(12,2);  
  144.   
  145.                     //alert(tempCsrq);  
  146.   
  147.                     //var tempSzdq = id.substr(0,2);                      
  148.   
  149.                     //var tempSzdq2  = id.substr(0,4);                    
  150.   
  151.                   //var tempSzdq3  = id.substr(0,6);  
  152.   
  153.                     
  154.   
  155.                   if(desSex!=tempSex){  
  156.   
  157.                         alert("身份证号码错误!和性别不相符。");     
  158.   
  159.                         form1.sfzhm.focus();  
  160.   
  161.                         return false;                         
  162.   
  163.                   }  
  164.   
  165.                   if(desCsrq!=tempCsrq){  
  166.   
  167.                         alert("身份证号码错误!和出生日期不相符。");   
  168.   
  169.                         form1.sfzhm.focus();  
  170.   
  171.                         return false;                                 
  172.   
  173.                   }  
  174.   
  175.                   //  
  176.   
  177.                     //if(desSzdq!=tempSzdq && desSzdq!=tempSzdq2 && desSzdq!=tempSzdq3  ){  
  178.   
  179.                     //  alert("身份证号码错误!和所在地区不相符。");   
  180.   
  181.                     //  form1.sfzhm.focus();  
  182.   
  183.                     //  return false;                             
  184.   
  185.                     //}  
  186.   
  187.                     //最后将15位的升位到18位,保存到数据库。  
  188.   
  189.                     //alert("开始转换升位");  
  190.   
  191.                     document.forms[0].sfzhm.value=id.toLowerCase();  
  192.   
  193.             }  
  194.   
  195.               
  196.   
  197.         } 

抱歉!评论已关闭.