• 最新身份证验证


    IDValidate.js
      1 var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];// 加权因子  
      2  var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值.10代表X  
      3  function IdCardValidate(idCard) {  
      4      idCard = trim(idCard.replace(/ /g, ""));  
      5      if (idCard.length == 15) {  
      6          return isValidityBrithBy15IdCard(idCard);  
      7      } else if (idCard.length == 18) {  
      8          var a_idCard = idCard.split("");// 得到身份证数组  
      9          if(isValidityBrithBy18IdCard(idCard)
     10     &&isTrueValidateCodeBy18IdCard(a_idCard)){  
     11              return true;  
     12          }else {  
     13              return false;  
     14          }  
     15      } else {  
     16          return false;  
     17      }  
     18  }  
     19  /** 
     20   * 判断身份证号码为18位时最后的验证位是否正确 
     21   * @param a_idCard 身份证号码数组 
     22   * @return 
     23   */ 
     24  function isTrueValidateCodeBy18IdCard(a_idCard) {  
     25      var sum = 0; // 声明加权求和变量  
     26      if (a_idCard[17].toLowerCase() == 'x') {  
     27          a_idCard[17] = 10;// 将最后位为x的验证码替换为10方便后续操作  
     28      }  
     29      for ( var i = 0; i < 17; i++) {  
     30          sum += Wi[i] * a_idCard[i];// 加权求和  
     31      }  
     32      valCodePosition = sum % 11;// 得到验证码所位置  
     33      if (a_idCard[17] == ValideCode[valCodePosition]) {  
     34          return true;  
     35      } else {  
     36          return false;  
     37      }  
     38  }  
     39  /** 
     40   * 通过身份证判断是男是女 
     41   * @param idCard 15/18位身份证号码  
     42   * @return 'female'-女、'male'-男 
     43   */ 
     44  function maleOrFemalByIdCard(idCard){  
     45      idCard = trim(idCard.replace(/ /g, ""));// 对身份证号码做处理。包括字符间有空格。  
     46      if(idCard.length==15){  
     47          if(idCard.substring(14,15)%2==0){  
     48              return 'female';  
     49          }else{  
     50              return 'male';  
     51          }  
     52      }else if(idCard.length ==18){  
     53          if(idCard.substring(14,17)%2==0){  
     54              return 'female';  
     55          }else{  
     56              return 'male';  
     57          }  
     58      }else{  
     59          return null;  
     60      }  
     61  //  可对传入字符直接当作数组来处理  
     62  // if(idCard.length==15){  
     63  // alert(idCard[13]);  
     64  // if(idCard[13]%2==0){  
     65  // return 'female';  
     66  // }else{  
     67  // return 'male';  
     68  // }  
     69  // }else if(idCard.length==18){  
     70  // alert(idCard[16]);  
     71  // if(idCard[16]%2==0){  
     72  // return 'female';  
     73  // }else{  
     74  // return 'male';  
     75  // }  
     76  // }else{  
     77  // return null;  
     78  // }  
     79  }  
     80   /** 
     81    * 验证18位数身份证号码中的生日是否是有效生日 
     82    * @param idCard 18位书身份证字符串 
     83    * @return 
     84    */ 
     85  function isValidityBrithBy18IdCard(idCard18){  
     86      var year =  idCard18.substring(6,10);  
     87      var month = idCard18.substring(10,12);  
     88      var day = idCard18.substring(12,14);  
     89      var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));  
     90      // 这里用getFullYear()获取年份,避免千年虫问题  
     91      if(temp_date.getFullYear()!=parseFloat(year)  
     92            ||temp_date.getMonth()!=parseFloat(month)-1  
     93            ||temp_date.getDate()!=parseFloat(day)){  
     94              return false;  
     95      }else{  
     96          return true;  
     97      }  
     98  }  
     99    /** 
    100     * 验证15位数身份证号码中的生日是否是有效生日 
    101     * @param idCard15 15位书身份证字符串 
    102     * @return 
    103     */ 
    104    function isValidityBrithBy15IdCard(idCard15){  
    105        var year =  idCard15.substring(6,8);  
    106        var month = idCard15.substring(8,10);  
    107        var day = idCard15.substring(10,12);  
    108        var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));  
    109        // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法  
    110        if(temp_date.getYear()!=parseFloat(year)  
    111                ||temp_date.getMonth()!=parseFloat(month)-1  
    112                ||temp_date.getDate()!=parseFloat(day)){  
    113                  return false;  
    114          }else{  
    115              return true;  
    116          }  
    117   }
    118   
    119  //去掉字符串头尾空格  
    120  function trim(str) {  
    121      return str.replace(/(^\s*)|(\s*$)/g, "");  
    122  } 
    123  
    124  
    125 function showBirthdayAndSex(idCard,sexId,birhId)
    126  {
    127     var birthdayValue;
    128     var val =trim(idCard);
    129     if(15==val.length)
    130     { //15位身份证号码
    131      birthdayValue = val.charAt(6)+val.charAt(7);
    132      if(parseInt(birthdayValue)<10)
    133      {
    134       birthdayValue = '20'+birthdayValue;
    135      }
    136      else
    137      {
    138       birthdayValue = '19'+birthdayValue;
    139      }
    140      birthdayValue=birthdayValue+'-'+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11);
    141      if(parseInt(val.charAt(14)/2)*2!=val.charAt(14))
    142      {
    143      document.getElementById(sexId).value='男';
    144   }
    145      else
    146   {
    147    document.getElementById(sexId).value='女';
    148   }
    149      document.getElementById(birhId).value=birthdayValue;
    150     }
    151     if(18==val.length)
    152     { //18位身份证号码
    153      birthdayValue=val.charAt(6)+val.charAt(7)+val.charAt(8)+val.charAt(9)+'-'+val.charAt(10)+val.charAt(11)  +'-'+val.charAt(12)+val.charAt(13);
    154      if(parseInt(val.charAt(16)/2)*2!=val.charAt(16))
    155      {
    156          document.getElementById(sexId).value='男';
    157      }
    158      else
    159      {
    160         document.getElementById(sexId).value='女';
    161      }
    162      document.getElementById(birhId).value=birthdayValue;
    163     }
    164   }
    165    // 18位身份证号最后一位校验
    166    function IDCard(Num)
    167    {
    168     if (Num.length!=18)
    169      return false;
    170      var x=0;
    171      var y='';
    172  
    173     for(i=18;i>=2;i--)
    174      x = x + (square(2,(i-1))%11)*parseInt(Num.charAt(19-i-1));
    175      x%=11;
    176      y=12-x;
    177      if (x==0)
    178    y='1';
    179      if (x==1)
    180    y='0';
    181      if (x==2)
    182    y='X';
    183   return y;
    184    }
    185  
    186   // 求得x的y次方
    187    function square(x,y)
    188    {
    189   var i=1;
    190   for (j=1;j<=y;j++)
    191    i*=x;
    192   return i;
    193    } 
    页面调用
    1 <script type="text/javascript" src="/js/IDValidate.js"></script>
    2 var card = document.getElementById("idcard").value;
    3 if (IdCardValidate(card)) {
    4   alert("ok")
    5 } else {
    6   alert("error");
    7 }
  • 相关阅读:
    重温算法第一篇:冒泡排序
    服务器报警邮件发送到QQ邮箱,但是被系统拦截
    记录MongoDB常用查询
    一次 Mysql 字符集的报错,最后让我万马奔腾!!!
    Hbase 一次表异常,有一张表 无法count scan 一直显示重连
    spark编译安装 spark 2.1.0 hadoop2.6.0-cdh5.7.0
    有一些sql 是必须要做笔记的!!
    linux 修改openfiles
    在线HTTP POST/GET接口测试工具
    HBase 官方文档中文版
  • 原文地址:https://www.cnblogs.com/lbxx/p/2870971.html
Copyright © 2020-2023  润新知