From 3552167d0d3303abd48fd9ff3cc86025c3c5e59e Mon Sep 17 00:00:00 2001 From: Jaime Lee Date: Mon, 9 Jun 2025 17:11:29 +0900 Subject: [PATCH] HV-2114 Add support for Korean foreigner RRN validation --- .../hv/kor/KorRRNValidator.java | 13 +++++++++++-- .../hv/kor/KorRRNValidatorNeverAttrTest.java | 8 ++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/hv/kor/KorRRNValidator.java b/engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/hv/kor/KorRRNValidator.java index 19ccf4bb7..e8ac274e9 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/hv/kor/KorRRNValidator.java +++ b/engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/hv/kor/KorRRNValidator.java @@ -22,7 +22,16 @@ */ public class KorRRNValidator implements ConstraintValidator { - private static final List GENDER_DIGIT = List.of( 1, 2, 3, 4 ); + // Gender digit in Korean Resident Registration Number (RRN): + // 1: Male, born 1900–1999 + // 2: Female, born 1900–1999 + // 3: Male, born 2000–2099 + // 4: Female, born 2000–2099 + // 5: Foreign male, born 1900–1999 + // 6: Foreign female, born 1900–1999 + // 7: Foreign male, born 2000–2099 + // 8: Foreign female, born 2000–2099 + private static final List GENDER_DIGIT = List.of(1, 2, 3, 4, 5, 6, 7, 8); // Check sum weight for ModUtil private static final int[] CHECK_SUM_WEIGHT = new int[] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 }; // index of the digit representing the gender @@ -90,7 +99,7 @@ private static boolean isValidDate(final String rrn) { if ( month < 1 || month > 12 || day < 1 || day > 31 ) { return false; } - return day <= 31 && ( day <= 30 || ( month != 4 && month != 6 && month != 9 && month != 11 ) ) && ( day <= 29 || month != 2 ); + return (day <= 30 || month != 4 && month != 6 && month != 9 && month != 11) && (day <= 29 || month != 2); } private static boolean isValidLength(String rrn) { diff --git a/engine/src/test/java/org/hibernate/validator/test/internal/constraintvalidators/hv/kor/KorRRNValidatorNeverAttrTest.java b/engine/src/test/java/org/hibernate/validator/test/internal/constraintvalidators/hv/kor/KorRRNValidatorNeverAttrTest.java index e95e4fd43..8d037edf8 100644 --- a/engine/src/test/java/org/hibernate/validator/test/internal/constraintvalidators/hv/kor/KorRRNValidatorNeverAttrTest.java +++ b/engine/src/test/java/org/hibernate/validator/test/internal/constraintvalidators/hv/kor/KorRRNValidatorNeverAttrTest.java @@ -47,6 +47,14 @@ void testNeverAttr() { assertValidRRN( "750519-1404601" ); } + @Test + void testNeverForeignerGenderDigits() { + assertValidRRN( "850101-5000000" ); + assertValidRRN( "920202-6000000" ); + assertValidRRN( "010101-7000000" ); + assertValidRRN( "030303-8000000" ); + } + /** * The test succeeds without hyphen ('-') */