js --身份证号合法性校验

来源:互联网 发布:雕刻软件有哪些 编辑:程序博客网 时间:2024/05/16 05:53

js --身份证号合法性校验

//身份证号合法性校验function IdentityCodeValid(sfzh){     if(sfzh == ""){      mini.alert("输入身份证号码不能为空!");        return false;      }    //长度    if (sfzh.length != 15 && sfzh.length != 18)  {      mini.alert("身份证号码格式不正确(长度不是15或18位)!");        return false;      }     //地址编码   var area={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:"国外"};          if(area[parseInt(sfzh.substr(0,2))]==null) {       mini.alert("身份证号码不正确(地区非法)!");           return false;       }     /*   15位身份证 校验      */        if (sfzh.length == 15){         pattern= /^\d{15}$/;         if (pattern.exec(sfzh)==null){         mini.alert("15位身份证号码必须为数字!");            return false;         }         var year = parseInt("19" + sfzh.substr(6,2));        var month = sfzh.substr(8,2);        var day = parseInt(sfzh.substr(10,2));      alert("ny"+checkMonthDay(year,month,day));      if(!checkMonthDay(year,month,day)) return false;      //      var nowYear = new Date().getYear();  //      if(nowYear - parseInt(year)<15 || nowYear - parseInt(year)>100) {  //          alert('输入身份证号码格式不正确!');  //          return false;  //      }        return true;      }             /*18位身份证需要验证最后一位校验位  */    if(sfzh.length == 18){       //出生年月    var year = parseInt(sfzh.substr(6,4));          var month = sfzh.substr(10,2);          var day = parseInt(sfzh.substr(12,2));          if(!checkMonthDay(year,month,day)) return false;           sfzh = sfzh.split('');          //∑(ai×Wi)(mod 11)          //加权因子          var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];          //校验位          /*校验位规则                         公式:∑(ai×Wi)(mod 11)……………………………………(1)                   公式(1)中:         ai----表示第i位置上的号码字符值;         Wi----示第i位置上的加权因子,其数值依据公式Wi=2^(n-1)(mod 11)计算得出。        Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1        */               //余数[ 0   1  2   3  4  5  6  7  8  9  10]        var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];          var sum = 0;          var ai = 0;          var wi = 0;          for (var i = 0; i < 17; i++)          {              ai = sfzh[i];              wi = factor[i];              sum += ai * wi;          }        var last = parity[sum % 11];         // alert("余数"+sum % 11);       // alert("校验"+last);          if(last != sfzh[17]){              mini.alert('输入身份证号码格式不正确(校验位错误)!');             return false;            }        return true;    }         }  function checkMonthDay(year,month,day){ //出生年月校验    switch(month) {          case '01':          case '03':          case '05':          case '07':          case '08':          case '10':          case '12':              if(day>31) {              mini.alert('输入身份证号码格式不正确(出生日期,年月非法)!');                  return false;              }            break;          case '04':          case '06':          case '09':          case '11':              if(day>30) {              mini.alert('输入身份证号码格式不正确(出生日期,年月非法)!');                  return false;              }             break;          case '02':              if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {                  if(day>29) {                  mini.alert('输入身份证号码格式不正确(出生日期,年月非法)!');                      return false;                  }              }else {                  if(day>28) {                  mini.alert('输入身份证号码格式不正确(出生日期,年月非法)!');                      return false;                  }            }              break;          default:          mini.alert('输入身份证号码格式不正确(出生日期,月份非法)!');              return false;       }      return true;}




原创粉丝点击