如题求js判断身份证号码,包括15位 18位 17+x 的判断

解决方案 »

  1.   

    成人之美.正好项目有用到了/(^(\d{15}|\d{17}[\dxX])$)/
      

  2.   

    正则表达式 str="^\d{15}|\d{17}[\dX]$"
      

  3.   

    收藏到:              function CheckIDCard(StrNumber) 
    {
    //判断身份证号码格式函数
    //公民身份号码是特征组合码,
    //排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码//身份证号码长度判断
    if(StrNumber.length<15||StrNumber.length==16||StrNumber.length==17||StrNumber.length>18)
    {
    alert(\"填写的身份证号码长度不正确,请重新填写!\");
    return false;
    }
    //身份证号码最后一位可能是超过100岁老年人的X.X也可以代表是阿拉伯数字10的意思
    //所以排除掉最后一位数字进行数字格式测试,最后一位数字有最后一位数字的算法var Ai;
    if(StrNumber.length==18)
    {
    Ai = StrNumber.substring(0,17);
    }
    else
    {
    Ai =StrNumber.substring(0,6)+\"19\"+StrNumber.substring(6,9);
    }
    //调用数字判断函数IsNumeric()
    if(IsNumeric(Ai)==false)
    {
    alert(\"身份证号码数字字符串不正确,请重新填写!\");
    return false;
    }var strYear,strMonth,strDay,strBirthDay;
    strYear = parseInt(Ai.substr(6,4)); 
    strMonth = parseInt(Ai.substr(10,2)) ;
    strDay = parseInt(Ai.substr(12,2));
    //调用日期判断函数IsValidDate()
    if (IsValidDate(strYear,strMonth,strDay)==false)
    {
    alert(\"身份证号码\"+Ai+\"日期格式年份\"+strYear+\"月份\"+strMonth+\"日\"+strDay+\"不正确,请重新填写!\");
    return false;
    }var arrVerifyCode = new Array(\"1\",\"0\",\"x\",\"9\",\"8\",\"7\",\"6\",\"5\",\"4\",\"3\",\"2\");
    var Wi = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
    var k,TotalmulAiWi=0;
    for (k=0; k<17;k++)
     { 
     TotalmulAiWi = TotalmulAiWi + parseInt(Ai.substr(k,1)) * Wi[k];
     
      }
    //alert(\"身份证号码最后一位的识别码是:\"+TotalmulAiWi);
    var modValue =TotalmulAiWi % 11 ;
    var strVerifyCode = arrVerifyCode[modValue];
    Ai = Ai+strVerifyCode;
    //alert(\"身份证号码\"+StrNumber+\"与正确的号码\"+Ai+\"一致!\");
    if((StrNumber.length==18)&&(StrNumber!=Ai))
    {
    alert(\"身份证号码\"+StrNumber+\"与正确的号码\"+Ai+\"不一致,请重新填写!\");
    return false;
    }
    return true;}
    //数字判断函数IsNumeric()
    function IsNumeric(oNum) 

      if(!oNum) return false; 
      var strP=/^\\d+(\\.\\d+)?$/; 
      if(!strP.test(oNum)) return false; 
      try{ 
      if(parseFloat(oNum)!=oNum) return false; 
      } 
      catch(ex) 
      { 
       return false; 
      } 
      return true; 
    }
    //有效年份判断函数其余楼主参考http://www.cn17xue.com/wangyesheji/html/731.html
      

  4.   


    很久很久以前专门研究过,喝喝,可以看看下面的JS代码:<script>   
      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?"男":"女")   
      }     
      </script>