Skip to content

Commit ff110bf

Browse files
authored
swedish ssn cannot have format like XXXXXX-000X (#1434)
* swedish ssn cannot have format like XXXXXX-000X, the number part has to be between 001 and 999
1 parent 1b19bdc commit ff110bf

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/main/java/net/datafaker/idnumbers/SwedenIdNumber.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,18 @@ public String getValidSsn(BaseProviders f) {
3737
@Override
3838
public PersonIdNumber generateValid(BaseProviders f, IdNumber.IdNumberRequest request) {
3939
LocalDate birthday = birthday(f, request);
40-
String end = f.numerify("###");
40+
String end = generateEndPart(f);
4141
String basePart = DATE_TIME_FORMATTER.format(birthday)
4242
+ f.options().option(PLUS_MINUS)
4343
+ end;
4444
String idNumber = basePart + calculateChecksum(basePart);
4545
return new PersonIdNumber(idNumber, birthday, gender(f, request));
4646
}
4747

48+
public static String generateEndPart(BaseProviders f) {
49+
return "%03d".formatted(f.number().numberBetween(1, 1000));
50+
}
51+
4852
@Deprecated
4953
public String getInvalidSsn(BaseProviders f) {
5054
return generateInvalid(f);
@@ -78,6 +82,10 @@ public static boolean isValidSwedishSsn(String ssn) {
7882
return false;
7983
}
8084

85+
if (ssn.startsWith("000", 7)) {
86+
return false;
87+
}
88+
8189
int calculatedChecksum = calculateChecksum(ssn);
8290
int checksum = Integer.parseInt(ssn.substring(10, 11));
8391
return checksum == calculatedChecksum;

src/test/java/net/datafaker/idnumbers/SwedishIdNumberTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ void validSwedishSsn() {
1414

1515
@Test
1616
void invalidSwedishSsn() {
17+
assertThat(SwedenIdNumber.isValidSwedishSsn("020914-0003")).isFalse();
1718
assertThat(SwedenIdNumber.isValidSwedishSsn("8112289873")).isFalse();
1819
assertThat(SwedenIdNumber.isValidSwedishSsn("foo228-9873")).isFalse();
1920
assertThat(SwedenIdNumber.isValidSwedishSsn("811228-9873")).isFalse();

0 commit comments

Comments
 (0)