자바 주민등록번호 정규 표현 식 검사 (마지막 검사 값 규칙 포함)

3078 단어 Java
주석 을 자세히 읽 어 주세요.
15 비트 와 18 비트 주민등록번호 의 판단 이 포함 되 어 있 습 니 다. 정규 표현 식 이 길 기 때문에 좌우 로 미 끄 러 지 십시오.

    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 {
                        System.out.println("       :" + String.valueOf(idCardLast).toUpperCase() + 
                                "  ,      :" + idCardY[idCardMod].toUpperCase());
                        return false;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("  :" + IDNumber);
                    return false;
                }
            }

        }
        return matches;
    }

좋은 웹페이지 즐겨찾기