zoukankan      html  css  js  c++  java
  • java 身份证验证

    public class hello {

    public static void main(String[] args) {
    System.out.println(isIDNumber("xxxxxxxxxxxxx"));
    }

    public static boolean isIDNumber(String IDNumber) {
    if (IDNumber == null || "".equals(IDNumber)) {
    return false;
    }
    // 定义判别用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)
    String regularExpression = "(^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|" +
    "(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)";
    //假设18位身份证号码:41000119910101123X 410001 19910101 123X
    //^开头
    //[1-9] 第一位1-9中的一个 4
    //\d{5} 五位数字 10001(前六位省市县地区)
    //(18|19|20) 19(现阶段可能取值范围18xx-20xx年)
    //\d{2} 91(年份)
    //((0[1-9])|(10|11|12)) 01(月份)
    //(([0-2][1-9])|10|20|30|31)01(日期)
    //\d{3} 三位数字 123(第十七位奇数代表男,偶数代表女)
    //[0-9Xx] 0123456789Xx其中的一个 X(第十八位为校验值)
    //$结尾

    //假设15位身份证号码:410001910101123 410001 910101 123
    //^开头
    //[1-9] 第一位1-9中的一个 4
    //\d{5} 五位数字 10001(前六位省市县地区)
    //\d{2} 91(年份)
    //((0[1-9])|(10|11|12)) 01(月份)
    //(([0-2][1-9])|10|20|30|31)01(日期)
    //\d{3} 三位数字 123(第十五位奇数代表男,偶数代表女),15位身份证不含X
    //$结尾


    boolean matches = IDNumber.matches(regularExpression);

    //判断第18位校验值
    if (matches) {

    if (IDNumber.length() == 18) {
    try {
    char[] charArray = IDNumber.toCharArray();
    //前十七位加权因子
    int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    //这是除以11后,可能产生的11位余数对应的验证码
    String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
    int sum = 0;
    for (int i = 0; i < idCardWi.length; i++) {
    int current = Integer.parseInt(String.valueOf(charArray[i]));
    int count = current * idCardWi[i];
    sum += count;
    }
    char idCardLast = charArray[17];
    int idCardMod = sum % 11;
    if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
    return true;
    } else {
    return false;
    }

    } catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    }

    }
    return matches;
    }

    }
    转自:https://blog.csdn.net/tyyking/article/details/88778485
    有15位和18位,而且里面还有验证后四位的代码.后四位瞎编是过不去的
  • 相关阅读:
    写代码实现两个 goroutine,其中一个产生随机数并写入到 go channel 中,另外一 个从 channel 中读取数字并打印到标准输出。最终输出五个随机数。
    05| RWMutex:读写锁的实现原理及避坑指南
    go 面试题
    go 局部变量在哪
    12 _ atomic:要保证原子操作,一定要使用这几种方法
    11 _ Context:信息穿透上下文
    什么是线程
    go面试题
    redis连接池 go
    docker 指定版本rpm包安装
  • 原文地址:https://www.cnblogs.com/austinspark-jessylu/p/15478839.html
Copyright © 2011-2022 走看看