diff --git a/src/main/java/net/datafaker/idnumbers/SwedenIdNumber.java b/src/main/java/net/datafaker/idnumbers/SwedenIdNumber.java index 2d28a0e08..11cc045cf 100644 --- a/src/main/java/net/datafaker/idnumbers/SwedenIdNumber.java +++ b/src/main/java/net/datafaker/idnumbers/SwedenIdNumber.java @@ -37,7 +37,7 @@ public String getValidSsn(BaseProviders f) { @Override public PersonIdNumber generateValid(BaseProviders f, IdNumber.IdNumberRequest request) { LocalDate birthday = birthday(f, request); - String end = f.numerify("###"); + String end = generateEndPart(f); String basePart = DATE_TIME_FORMATTER.format(birthday) + f.options().option(PLUS_MINUS) + end; @@ -45,6 +45,10 @@ public PersonIdNumber generateValid(BaseProviders f, IdNumber.IdNumberRequest re return new PersonIdNumber(idNumber, birthday, gender(f, request)); } + public static String generateEndPart(BaseProviders f) { + return "%03d".formatted(f.number().numberBetween(1, 1000)); + } + @Deprecated public String getInvalidSsn(BaseProviders f) { return generateInvalid(f); @@ -78,6 +82,10 @@ public static boolean isValidSwedishSsn(String ssn) { return false; } + if (ssn.startsWith("000", 7)) { + return false; + } + int calculatedChecksum = calculateChecksum(ssn); int checksum = Integer.parseInt(ssn.substring(10, 11)); return checksum == calculatedChecksum; diff --git a/src/test/java/net/datafaker/idnumbers/SwedishIdNumberTest.java b/src/test/java/net/datafaker/idnumbers/SwedishIdNumberTest.java index 4224652e4..f8bc7e84b 100644 --- a/src/test/java/net/datafaker/idnumbers/SwedishIdNumberTest.java +++ b/src/test/java/net/datafaker/idnumbers/SwedishIdNumberTest.java @@ -14,6 +14,7 @@ void validSwedishSsn() { @Test void invalidSwedishSsn() { + assertThat(SwedenIdNumber.isValidSwedishSsn("020914-0003")).isFalse(); assertThat(SwedenIdNumber.isValidSwedishSsn("8112289873")).isFalse(); assertThat(SwedenIdNumber.isValidSwedishSsn("foo228-9873")).isFalse(); assertThat(SwedenIdNumber.isValidSwedishSsn("811228-9873")).isFalse();