zoukankan      html  css  js  c++  java
  • java判断身份证有效性

    import java.util.Calendar;
    
    public class CertNoUtil {
    
        public static boolean vIDNumByRegex(String idNum) {
    
            String curYear = "" + Calendar.getInstance().get(Calendar.YEAR);
            int y3 = Integer.valueOf(curYear.substring(2, 3));
            int y4 = Integer.valueOf(curYear.substring(3, 4));
            // 43 0103 1973 0 9 30 051 9
            return idNum.matches("^(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|71|8[1-2])\d{4}(19\d{2}|20([0-" + (y3 - 1) + "][0-9]|" + y3 + "[0-" + y4
                    + "]))(((0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])))\d{3}([0-9]|x|X)$");
            // 44 1825 1988 0 7 1 3 003 4
        }
    
        private static int ID_LENGTH = 17;
        public static boolean vIDNumByCode(String idNum) {
    
            // 系数列表
            int[] ratioArr = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    
            // 校验码列表
            char[] checkCodeList = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
    
            // 获取身份证号字符数组
            char[] cIds = idNum.toCharArray();
    
            // 获取最后一位(身份证校验码)
            char oCode = cIds[ID_LENGTH];
            int[] iIds = new int[ID_LENGTH];
            int idSum = 0;// 身份证号第1-17位与系数之积的和
            int residue = 0;// 余数(用加出来和除以11,看余数是多少?)
    
            for (int i = 0; i < ID_LENGTH; i++) {
                iIds[i] = cIds[i] - '0';
                idSum += iIds[i] * ratioArr[i];
            }
    
            residue = idSum % 11;// 取得余数
    
            return Character.toUpperCase(oCode) == checkCodeList[residue];
        }
    
        public static boolean vId(String idNum) {
            return vIDNumByCode(idNum) && vIDNumByRegex(idNum);
        }
    
        public static void main(String[] args) {
            String idNum = "430103197309300519";
            System.out.println(vId(idNum));
        }
    }
  • 相关阅读:
    栈的经典运用-求值数学表达式
    java中Stack的源码解析
    java-背包的实现
    数据库的事务的特性及隔离级别
    EnumMap的用法和源码解析
    java final关键字的解析
    java中的static关键字解析
    XPath如何定位dom节点
    java 枚举(enum) 详细用法
    jdk动态代理
  • 原文地址:https://www.cnblogs.com/Nbge/p/3974253.html
Copyright © 2011-2022 走看看