身份证号码验证-支持新的带x身份证

Calchas 发表于 2008, December 23, 1:55 PM

支持新身份证,支持带 x 的身份证

但是我测试 15位身份证的检查不正确。

 

JavaScript代码
  1. //--身份证号码验证-支持新的带x身份证   
  2. function isIdCardNo(num)    
  3. {   
  4.     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);   
  5.     var error;   
  6.     var varArray = new Array();   
  7.     var intValue;   
  8.     var lngProduct = 0;   
  9.     var intCheckDigit;   
  10.     var intStrLen = num.length;   
  11.     var idNumber = num;       
  12.     // initialize   
  13.     if ((intStrLen != 15) && (intStrLen != 18)) {   
  14.         //error = "输入身份证号码长度不对!";   
  15.         //alert(error);   
  16.         //frmAddUser.txtIDCard.focus();   
  17.         return false;   
  18.     }       
  19.     // check and set value   
  20.     for(i=0;i<intStrLen;i++) {   
  21.         varArray[i] = idNumber.charAt(i);   
  22.         if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {   
  23.             //error = "错误的身份证号码!.";   
  24.             //alert(error);   
  25.             //frmAddUser.txtIDCard.focus();   
  26.             return false;   
  27.         } else if (i < 17) {   
  28.             varArray[i] = varArray[i]*factorArr[i];   
  29.         }   
  30.     }   
  31.     if (intStrLen == 18) {   
  32.         //check date   
  33.         var date8 = idNumber.substring(6,14);   
  34.         if (checkDate(date8) == false) {   
  35.             //error = "身份证中日期信息不正确!.";   
  36.             //alert(error);   
  37.             return false;   
  38.         }           
  39.         // calculate the sum of the products   
  40.         for(i=0;i<17;i++) {   
  41.             lngProduct = lngProduct + varArray[i];   
  42.         }           
  43.         // calculate the check digit   
  44.         intCheckDigit = 12 - lngProduct % 11;   
  45.         switch (intCheckDigit) {   
  46.             case 10:   
  47.                 intCheckDigit = 'X';   
  48.                 break;   
  49.             case 11:   
  50.                 intCheckDigit = 0;   
  51.                 break;   
  52.             case 12:   
  53.                 intCheckDigit = 1;   
  54.                 break;   
  55.         }           
  56.         // check last digit   
  57.         if (varArray[17].toUpperCase() != intCheckDigit) {   
  58.             //error = "身份证效验位错误!...正确为: " + intCheckDigit + ".";   
  59.             //alert(error);   
  60.             return false;   
  61.         }   
  62.     }    
  63.     else{        //length is 15   
  64.         //check date   
  65.         var date6 = idNumber.substring(6,12);   
  66.         if (checkDate(date6) == false) {   
  67.             //alert("身份证日期信息有误!.");   
  68.             return false;   
  69.         }   
  70.     }   
  71.     //alert ("Correct.");   
  72.     return true;   
  73. }   
  74.   
  75. function checkDate(date)   
  76. {   
  77.     return true;   
  78. }   
  79.   
  80. //调用   
  81.     if(Trim(document.getElementById("IDcard").value)=="")   
  82.     {   
  83.         alert("必须填写身份证号");   
  84.         document.getElementById("IDcard").focus();   
  85.         return false;   
  86.     }   
  87.     if(!isIdCardNo(document.getElementById("IDcard").value))   
  88.     {   
  89.         alert("必须填写正确的身份证号");   
  90.         document.getElementById("IDcard").focus();   
  91.         return false;   
  92.     }   
引用: 点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5
» 我要发表评论 ...    访客评论: (1条记录)
  1. 1 邓麟 :
    2009, December 2, 10:06 AM   引用此文发表评论
    身份证号码验证建议使用正则表达式来做,就好比最后一位是由0、1、X构成。在正则里面直接写成[01X]即可。
       正则表达式的语意上更简练,复杂的字符验证最好用正则。
 
发表评论:( 你的参与是我最大的动力! )