求一个最新的身份证校验正则表达式 15 或者18位 校验年月日的 谢谢

求一个最新的身份证校验正则表达式 15 或者18位 校验年月日的 谢谢

4个回答

akxj2022
akxj2022 回复lojava123: /^\d{6}(18|19|20)?\d{2}((0[1]|0[3-9]|1[012])(0[1-9]|[1-2][0-9]|3[01]))|((02)(0[1-9]|1[0-9]|2[0-9]))\d{3}(\d|Xx)$/ 这个平年闰年还是无法判断
2 年多之前 回复
akxj2022
akxj2022 回复lojava123: 这个是有问题的,你看下面的评论,10月份的没有判断到,应该是:
2 年多之前 回复
lojava123
lojava123 您这个虽然比较长 但是我用着可以用 谢谢
2 年多之前 回复
lojava123
lojava123 您试下 1122199011111112 这个16位 过不去
2 年多之前 回复
public static boolean isValidUserIdCard(String source){
    if (null == source){
        return true;
    }else if (source.length() == 0){
        return true;
    }else {
        if (verForm(source)){
            char[] tempResult = source.toCharArray();
            if (verify(tempResult)){
                return true;
            }else {
                return false;
            }
        }else {
            return false;
        }
    }
}

    //<------------------身份证格式的正则校验----------------->
private static boolean verForm(String num) {
    String reg = "^\\d{15}$|^\\d{17}[0-9Xx]$";
    if (!num.matches(reg)) {
        System.out.println("Format Error!");
        return false;
    }
    return true;
}

//<------------------身份证最后一位的校验算法----------------->
private static boolean verify(char[] id) {
    int sum = 0;
    int w[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
    char[] ch = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
    for (int i = 0; i < id.length - 1; i++) {
        sum += (id[i] - '0') * w[i];
    }
    int c = sum % 11;
    char code = ch[c];
    char last = id[id.length-1];
    last = last == 'x' ? 'X' : last;
    return last == code;
}
先判断平年闰年,再使用不同的正则表达式
function regTest (card) {
    var year = parseInt(card.substring(6,10));
    var rn;
    var reg;
    if(((year%400==0) || (year%100!=0) ) && (year%4==0)){
        //闰年
        reg = /^\d{6}(18|19|20)?\d{2}((0[1]|0[3-9]|1[012])(0[1-9]|[1-2][0-9]|3[01]))|((02)(0[1-9]|1[0-9]|2[0-9]))\d{3}(\d|Xx)$/;
        rn = "闰年";
    }else{
        //平年
        reg = /^\d{6}(18|19|20)?\d{2}((0[1]|0[3-9]|1[012])(0[1-9]|[1-2][0-9]|3[01]))|((02)(0[1-9]|1[0-9]|2[0-8]))\d{3}(\d|Xx)$/;
        rn = "平年";
    }
    var result = reg.test(card);
    alert(rn + "    是否合法:" + result);
    return result;
}

出自小辉辉之手~
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐