if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
               alert("身份证号格式错误");
            }
请问这段代码到底哪里出问题了呢,code为身份证号,绝大部分身份证可以通过,但是部分身份证却不可以,本人没深入了解过正则表达式,请明白的大大给看看,非常感谢JS身份证验证问题

解决方案 »

  1.   

     if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)))  
    改为这个吧
      

  2.   

    /^ 开头
    \d{6} //-6位数字
    (18|19|20)? //年份前两位(指定了18,18,20),其他的不满足
    \d{2} //年份后两位
    (0[1-9]|1[12]) // 月份
    (0[1-9]|[12]\d|3[01]) //日
    \d{3} //三位数字
    (\d|X)// 一位数字或者X
    $/i // 忽略大小写整个正则校验18位,如果是少于18位的 肯定校验不过
    网上有很多这样的例子,拿来一个研究下就OK一楼的判断虽然可行,但是比较简单,如果想要很严格的校验身份证,就要查看身份证生成规则了