.Net提供的身份证验证的正则表达式为:\d{18}|\d{15}
但是有的身份证尾数为x 并不是数字
验证的结果是不满足条件 但是这样的身份证号码是合法的
请问尾数为x的15位或18位的身份证的正则表达式怎么写?

解决方案 »

  1.   

    //身份证正则表达式(15位) 
    isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/; //身份证正则表达式(18位) isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/; 
      

  2.   

    梅花雨的脚本
    <SCRIPT   LANGUAGE="JavaScript">
    function   isIdCardNo(num)
    {
        if   (isNaN(num))   {alert("输入的不是数字!");   return   false;}
        var   len   =   num.length,   re;   
        if   (len   ==   15)
            re   =   new   RegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);
        else   if   (len   ==   18)
            re   =   new   RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
        else   {alert("输入的数字位数不对!");   return   false;}
        var   a   =   num.match(re);
        if   (a   !=   null)
        {
            if   (len==15)
            {
                var   D   =   new   Date("19"+a[3]+"/"+a[4]+"/"+a[5]);
                var   B   =   D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
            }
            else
            {
                var   D   =   new   Date(a[3]+"/"+a[4]+"/"+a[5]);
                var   B   =   D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate()==a[5];
            }
            if   (!B)   {alert("输入的身份证号   "+   a[0]   +"   里出生日期不对!");   return   false;}
        }
        return   true;
    }
    isIdCardNo("330103780133103");
    isIdCardNo("330103780123103");
    isIdCardNo("330103197801231030");
    </SCRIPT>
      

  3.   

    更健壮的 地区和身份证的关系也判断到 还有性别
    <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?"男":"女")
    }document.write(cidInfo("380524198002300016"),"<br/>");
    document.write(cidInfo("340524198002300019"),"<br/>")
    document.write(cidInfo("340524197711111111"),"<br/>")
    document.write(cidInfo("34052419800101001x"),"<br/>");
    document.write(cidInfo("220283198011200331"),"<br/>");
    </script>