Java 根據18位身份證號 判斷 最后一位校驗碼 邏輯判斷身份證合法性


判斷邏輯說明

410 782 19930905 305 6
省編碼 市編碼 出生年月日 隨機碼(最后一位是性別) 校驗碼
    /**
     * 18位身份證號 最后一位校驗碼 判斷方法
     * 邏輯:
     * 1:身份證號前17位數分別乘不同的系數
     * 從第1位到17位的系數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
     * 2:將乘積之和除以11,余數可能為:0 1 2 3 4 5 6 7 8 9 10
     * 3:根據余數,分別對應最后一位身份證號:1 0 X 9 8 7 6 5 4 3 2
     * 余數與校驗碼對應關系:0:1,1:0,2:X,3:9,4:8,5:7,6:6,7:5,8:4,9:3:10:2
     *
     * @param idCard 身份證號
     */
    public static boolean checkIDCard(String idCard) {
        if (idCard == null || idCard.equals("") || idCard.length() != 18) {
            return false;
        }

        char[] chars = idCard.toCharArray();
        int charsLength = chars.length - 1;
        int count = 0;
        for (int i = 0; i < charsLength; i++) {
            int charI = Integer.parseInt(String.valueOf(chars[i]));
            count += charI * (Math.pow(2, 17 - i) % 11);
        }
        String idCard18 = String.valueOf(chars[17]).toUpperCase();

        String idCardLast;
        switch (count % 11) {
            case 0:
                idCardLast = "1";
                break;

            case 1:
                idCardLast = "0";
                break;

            case 2:
                idCardLast = "X";
                break;

            default:
                idCardLast = 12 - (count % 11) + "";
                break;
        }
        return idCard18.equals(idCardLast);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM