您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        身份证号码是每个公民的唯一标识,广泛应用于各种场景中。为了确保身份证号码的有效性,我们需要对其进行验证。本文将详细介绍如何使用JAVA编程语言来验证身份证号码的有效性。
18位身份证号码由以下几部分组成:
15位身份证号码由以下几部分组成:
18位身份证号码的校验规则主要包括以下几个方面:
15位身份证号码的校验规则主要包括以下几个方面:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
public class IDCardValidator {
    private static final Map<Integer, String> zoneNum = new HashMap<>();
    static {
        zoneNum.put(11, "北京");
        zoneNum.put(12, "天津");
        zoneNum.put(13, "河北");
        zoneNum.put(14, "山西");
        zoneNum.put(15, "内蒙古");
        zoneNum.put(21, "辽宁");
        zoneNum.put(22, "吉林");
        zoneNum.put(23, "黑龙江");
        zoneNum.put(31, "上海");
        zoneNum.put(32, "江苏");
        zoneNum.put(33, "浙江");
        zoneNum.put(34, "安徽");
        zoneNum.put(35, "福建");
        zoneNum.put(36, "江西");
        zoneNum.put(37, "山东");
        zoneNum.put(41, "河南");
        zoneNum.put(42, "湖北");
        zoneNum.put(43, "湖南");
        zoneNum.put(44, "广东");
        zoneNum.put(45, "广西");
        zoneNum.put(46, "海南");
        zoneNum.put(50, "重庆");
        zoneNum.put(51, "四川");
        zoneNum.put(52, "贵州");
        zoneNum.put(53, "云南");
        zoneNum.put(54, "西藏");
        zoneNum.put(61, "陕西");
        zoneNum.put(62, "甘肃");
        zoneNum.put(63, "青海");
        zoneNum.put(64, "宁夏");
        zoneNum.put(65, "新疆");
        zoneNum.put(71, "台湾");
        zoneNum.put(81, "香港");
        zoneNum.put(82, "澳门");
        zoneNum.put(91, "国外");
    }
    private static final int[] PARITYBIT = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
    private static final int[] POWER_LIST = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    public static boolean isValidIDCard(String idCard) {
        if (idCard == null || (idCard.length() != 15 && idCard.length() != 18)) {
            return false;
        }
        if (idCard.length() == 15) {
            return validate15IDCard(idCard);
        }
        return validate18IDCard(idCard);
    }
    private static boolean validate18IDCard(String idCard) {
        if (idCard == null || idCard.length() != 18) {
            return false;
        }
        String idCard17 = idCard.substring(0, 17);
        String idCard18Code = idCard.substring(17, 18);
        char[] c;
        String checkCode;
        if (isDigital(idCard17)) {
            c = idCard17.toCharArray();
        } else {
            return false;
        }
        int[] iCard = convertCharToInt(c);
        int iSum17 = getPowerSum(iCard);
        checkCode = getCheckCode18(iSum17);
        if (null == checkCode) {
            return false;
        }
        if (!idCard18Code.equalsIgnoreCase(checkCode)) {
            return false;
        }
        return true;
    }
    private static boolean validate15IDCard(String idCard) {
        if (idCard == null || idCard.length() != 15) {
            return false;
        }
        if (isDigital(idCard)) {
            String birthDay = idCard.substring(6, 12);
            Date birthDate = null;
            try {
                birthDate = new SimpleDateFormat("yyMMdd").parse(birthDay);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            Calendar cal = Calendar.getInstance();
            if (birthDate != null) {
                cal.setTime(birthDate);
            }
            return valiDate(cal.get(Calendar.YEAR), (cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
        } else {
            return false;
        }
    }
    private static boolean isDigital(String str) {
        return str == null || "".equals(str) ? false : str.matches("^[0-9]*$");
    }
    private static int[] convertCharToInt(char[] ca) {
        int len = ca.length;
        int[] iArr = new int[len];
        try {
            for (int i = 0; i < len; i++) {
                iArr[i] = Integer.parseInt(String.valueOf(ca[i]));
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return iArr;
    }
    private static int getPowerSum(int[] iArr) {
        int iSum = 0;
        if (POWER_LIST.length == iArr.length) {
            for (int i = 0; i < iArr.length; i++) {
                for (int j = 0; j < POWER_LIST.length; j++) {
                    if (i == j) {
                        iSum = iSum + iArr[i] * POWER_LIST[j];
                    }
                }
            }
        }
        return iSum;
    }
    private static String getCheckCode18(int iSum17) {
        switch (iSum17 % 11) {
            case 10:
                return "2";
            case 9:
                return "3";
            case 8:
                return "4";
            case 7:
                return "5";
            case 6:
                return "6";
            case 5:
                return "7";
            case 4:
                return "8";
            case 3:
                return "9";
            case 2:
                return "x";
            case 1:
                return "0";
            case 0:
                return "1";
            default:
                return null;
        }
    }
    private static boolean valiDate(int iYear, int iMonth, int iDay) {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        int datePerMonth;
        if (iYear < 1900 || iYear >= year) {
            return false;
        }
        if (iMonth < 1 || iMonth > 12) {
            return false;
        }
        switch (iMonth) {
            case 4:
            case 6:
            case 9:
            case 11:
                datePerMonth = 30;
                break;
            case 2:
                boolean dm = ((iYear % 4 == 0 && iYear % 100 != 0) || (iYear % 400 == 0)) && (iYear > 1900 && iYear < year);
                datePerMonth = dm ? 29 : 28;
                break;
            default:
                datePerMonth = 31;
        }
        return (iDay >= 1) && (iDay <= datePerMonth);
    }
}
public class IDCardValidator {
    // ... 其他代码 ...
    private static boolean validate15IDCard(String idCard) {
        if (idCard == null || idCard.length() != 15) {
            return false;
        }
        if (isDigital(idCard)) {
            String birthDay = idCard.substring(6, 12);
            Date birthDate = null;
            try {
                birthDate = new SimpleDateFormat("yyMMdd").parse(birthDay);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            Calendar cal = Calendar.getInstance();
            if (birthDate != null) {
                cal.setTime(birthDate);
            }
            return valiDate(cal.get(Calendar.YEAR), (cal.get(Calendar.MONTH) + 1), cal.get(Calendar.DAY_OF_MONTH));
        } else {
            return false;
        }
    }
    // ... 其他代码 ...
}
public class IDCardValidator {
    // ... 其他代码 ...
    public static boolean isValidIDCard(String idCard) {
        if (idCard == null || (idCard.length() != 15 && idCard.length() != 18)) {
            return false;
        }
        if (idCard.length() == 15) {
            return validate15IDCard(idCard);
        }
        return validate18IDCard(idCard);
    }
    // ... 其他代码 ...
}
本文详细介绍了如何使用JAVA编程语言来验证身份证号码的有效性。通过理解身份证号码的结构和校验规则,我们可以编写出高效的验证代码。希望本文能帮助你在实际项目中更好地应用身份证号码验证技术。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。