문자열 UUID가 Java에서 유효한지 확인

첫 단어



모든 크레딧은 Daniel Heid에게 있습니다. 이 코드는 Github의 hibernate-validator 저장소에 있는 그의 코드PR를 기반으로 합니다. 고마워, 다니엘!

코드



저를 읽고 싶지 않다면 아래 코드를 복사하고 제가 코드의 첫 줄에 남겨둔 지침을 따르십시오.

/* 
 * This code is based on this PR: https://github.com/hibernate/hibernate-validator/pull/1199
 * All credits to Daniel Heid (dheid). I just made some adjustments.
 * In order to apply this on your situation, just create this class and call the method "isValidStringUUID". As its param, pass in your string UUID.
*/

public class UUIDValidator {
    enum LetterCase {

        /**
         * Only lower case is valid
         */
        LOWER_CASE,

        /**
         * Only upper case is valid
         */
        UPPER_CASE,

        /**
         * Every letter case is valid
         */
        INSENSITIVE

    }

    private static LetterCase letterCase = LetterCase.LOWER_CASE;

    private static final int[] GROUP_LENGTHS = { 8, 4, 4, 4, 12 };

    public static boolean isValidStringUUID(String value) {
        if ( value == null ) {
            return false;
        }
        int valueLength = value.length();
        if ( valueLength == 0 ) {
            return false;
        }
        else if ( valueLength != 36 ) {
            return false;
        }

        int groupIndex = 0;
        int groupLength = 0;
        int checksum = 0;
        for ( int charIndex = 0; charIndex < valueLength; charIndex++ ) {

            char ch = value.charAt( charIndex );

            if ( ch == '-' ) {
                groupIndex++;
                groupLength = 0;
            }
            else {

                groupLength++;
                if ( groupLength > GROUP_LENGTHS[groupIndex] ) {
                    return false;
                }

                int numericValue = Character.digit( ch, 16 );
                if ( numericValue == -1 ) {
                    // not a hex digit
                    return false;
                }
                if ( numericValue > 9 && !hasCorrectLetterCase( ch ) ) {
                    return false;
                }
                checksum += numericValue;
            }
        }
        // NIL UUID
        if ( checksum == 0 ) {
            return false;
        }
        return true;
    }
    private static boolean hasCorrectLetterCase(char ch) {
        if ( letterCase == null ) {
            return true;
        }
        if ( letterCase == LetterCase.LOWER_CASE && !Character.isLowerCase( ch ) ) {
            return false;
        }
        return letterCase != LetterCase.UPPER_CASE || Character.isUpperCase( ch );
    }
}


작동하게 하려면 프로젝트에서 이 클래스를 생성하고 UUIDValidator.isValidStringUUID(String your_UUID_String_Goes_Here) 메서드를 호출하십시오.

이 코드에는 모든 종류의 유효성 검사가 있습니다. null인 경우, 빈 문자열인 경우, 길이가 잘못된 경우, UUID 문자열의 숫자에 16진수만 포함된 경우, UUID의 각 그룹에 올바른 양의 숫자가 포함된 경우 캐릭터 등

좀 더 전문화된 검증인을 원하신다면 앞서 말씀드렸던 PR 확인도 잊지마세요. 또한 UUID 버전 및 해당 변형을 가져오는 방법도 포함되어 있습니다.

읽기 좋은



이 주제에 대해 자세히 알아보고 싶다면(확실히 풍부하고 흥미로움) 확인할 수 있습니다this link.

...끝!



그게 다야! 읽어주셔서 감사합니다 😁

좋은 웹페이지 즐겨찾기