有没有准确点的手机号和身份证号的验证的javascript类库?

有没有准确点的手机号和身份证号的验证的javascript类库?或者java后端验证类库也可以,求推荐

阅读 4.3k
6 个回答

js正则不行吗?

手机号正则:

var phone_reg = /^1[3|4|5|8][0-9]\d{4,8}$/

15位身份证正则:

var isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/; 

18位身份证正则:

var isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;

jQuery UI里有表单验证,主要用正则来实现。

手机的话,用正则就行了,这是我笔记的,但是 貌似运营商时不时就增加号段,所以有时候难免遇到一些新手机号过不去,所以这个建议翻翻是否 有更新最新的,最偷懒的大概就是1xxxxxxxxxxxx这种形式了吧

//-----手机号校验
var patrn = /^(((13[0-9]{1})|15[0-9]{1}|18[0-9]{1})\d{8})$/; 
//   /^(((13[0-9]{1})|15[0-9]{1}|17[0-9]{1}|18[0-9]{1}|)\d{8})$/

if (!patrn.exec(phoneNumber)) { 
 alert("您输入的手机号码格式不正确!"); 
 return false;
}

身份证那块,我翻了翻笔记,忘了出处了

var idPRC = (function(){
    var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];    // 加权因子  
    var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];            // 身份证验证位值.10代表X  
    function IdCardValidate(idCard) {
        idCard = trim((''+idCard).replace(/ /g, ""));               //去掉字符串头尾空格                    
        if (idCard.length == 15) {  
            return isValidityBrithBy15IdCard(idCard);       //进行15位身份证的验证    
        } else if (idCard.length == 18) {  
            var a_idCard = idCard.split("");                // 得到身份证数组  
            if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){   //进行18位身份证的基本验证和第18位的验证
                return true;  
            }else {  
                return false;  
            }  
        } else {  
            return false;  
        }  
    }  
    /**  
     * 判断身份证号码为18位时最后的验证位是否正确  
     * @param a_idCard 身份证号码数组  
     * @return  
     */  
    function isTrueValidateCodeBy18IdCard(a_idCard) {  
        var sum = 0,valCodePosition = -1;                             // 声明加权求和变量  
        if (a_idCard[17].toLowerCase() == 'x') {  
            a_idCard[17] = 10;                    // 将最后位为x的验证码替换为10方便后续操作  
        }  
        for ( var i = 0; i < 17; i++) {  
            sum += Wi[i] * a_idCard[i];            // 加权求和  
        }  
        valCodePosition = sum % 11;                // 得到验证码所位置  
        if (a_idCard[17] == ValideCode[valCodePosition]) {  
            return true;  
        } else {  
            return false;  
        }  
    }  
    /**  
      * 验证18位数身份证号码中的生日是否是有效生日  
      * @param idCard 18位书身份证字符串  
      * @return  
      */  
    function isValidityBrithBy18IdCard(idCard18){  
        var year =  idCard18.substring(6,10);  
        var month = idCard18.substring(10,12);  
        var day = idCard18.substring(12,14);  
        var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));  
        // 这里用getFullYear()获取年份,避免千年虫问题  
        if(temp_date.getFullYear()!=parseFloat(year)  
              ||temp_date.getMonth()!=parseFloat(month)-1  
              ||temp_date.getDate()!=parseFloat(day)){  
                return false;  
        }else{  
            return true;  
        }  
    }  
      /**  
       * 验证15位数身份证号码中的生日是否是有效生日  
       * @param idCard15 15位书身份证字符串  
       * @return  
       */  
      function isValidityBrithBy15IdCard(idCard15){  
          var year =  idCard15.substring(6,8);  
          var month = idCard15.substring(8,10);  
          var day = idCard15.substring(10,12);  
          var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));  
          // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法  
          if(temp_date.getYear()!=parseFloat(year)  
                  ||temp_date.getMonth()!=parseFloat(month)-1  
                  ||temp_date.getDate()!=parseFloat(day)){  
                    return false;  
            }else{  
                return true;  
            }  
      }  
    //去掉字符串头尾空格  
    function trim(str) {  
        return str.replace(/(^\s*)|(\s*$)/g, "");  
    }  
    return {validate:IdCardValidate};
})();
     tel : /^1[3-8]\d{9}$/  
  IDCard : /^[1-9]\d{16}[\dx]$/i 

这个东西有时间的话最好自己写正则吧,不是太难,出了问题也好改

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题