• Java身份证号码验证


    关于身份证号码校验规则,这里整理了一个调用工具,希望可以帮到各位:

    /**
     *  desc: 身份证校验规则 
    * @author lzy */
    public class IdCardCheckUtils { //身份证前17位数字依次乘以对应的权重因子 public static final Integer[] idCardWeight = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; //身份证最后一位对应的校验码 public static final String[] idCardCheck = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}; //组装根据余数,对应一个指定的校验码 Map<Integer, String> idCardMap = new HashMap<>(); public Boolean idCardNumberCheck(String idCardNo) { boolean check = false; //将其转成大写有的身份证最后一位是字母 String idCard = idCardNo.toUpperCase(); //15位身份证转成18位 if (idCardNo.length() == 15) { if (!(idCardNo.matches("[0-9]{17}[0-9|x]|[0-9]{15}"))) { System.out.println("请输入正确格式的15位身份证号码"); return false; } else { //15位转换为18位 String s2 = idCardNo.substring(0, 6); String s3 = idCardNo.substring(6, 15); String changed = s2.concat("19").concat(s3); idCard = changed.toUpperCase(); } } //获取身份证最后一位进行验证 String lastStr = idCard.substring(idCard.length() - 1); //获取身份证前17位 String firstStr = idCard.substring(0, 17); //验证身份证前17位是否为数字 boolean isDigits = Pattern.matches("^\\d{17}", firstStr); if (!isDigits) { return false; } //全局变量 if (idCardMap.isEmpty()) { for (int i = 0; i <= 10; i++) { idCardMap.put(i, idCardCheck[i]); } } char[] idCardCharNumber = idCard.toCharArray(); Integer resultSum = 0; for (int i = 0; i < idCardCharNumber.length - 1; i++) { resultSum += Character.getNumericValue(idCardCharNumber[i]) * idCardWeight[i]; } //将相加的前17位数字依次乘以对应的权重因子相加,相加的结果除以11,得到余数 Integer lastResult = resultSum % 11; //根据余数,对应一个指定的校验码。最终得到的校验码就是身份证号码的最后一位数字。通过这个校验码,可以验证前面17位数字是否正确,从而提高身份证号码的准确性 if (idCardMap.containsKey(lastResult)) { check = idCardMap.get(lastResult).equals(lastStr); } return check; } public static void main(String[] args) throws Exception { IdCardCheckUtils test = new IdCardCheckUtils(); String idCard = "110101190001011009"; Boolean idCardNumberCheck = test.idCardNumberCheck(idCard); if (!idCardNumberCheck) { System.out.println("身份证号码有误!"); System.exit(0); } System.out.println("出生日期:" + idCard.substring(6, 10) + "." + idCard.substring(10, 12) + "." + idCard.substring(12, 14)); System.out.println("性别:" + (Integer.parseInt(idCard.substring(16, 17)) % 2 == 0 ? "女" : "男")); } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
  • 相关阅读:
    最短路:leetcode1334. 阈值距离内邻居最少的城市
    poj 2182 Lost Cows (树状数组 || 线段树)
    使用Python的Turtle库绘制一个心形图像(含详细Python代码与注释)
    Django中的CSRF使用及ajax请求接口时问题总结
    大疆御3(DJI Mavic 3)照片格式,设置默认JPG格式
    SpringCloud入门详细教程二(Nacos配置管理,http客户端Feign,统一网关Gateway)
    8000字,程序性能优化的全能手册
    netstat命令详解
    vue3使用知识点总结
    NTLM与kerberos认证体系详解
  • 原文地址:https://blog.csdn.net/weixin_42828203/article/details/134433144