Skip to content

Commit d725193

Browse files
authored
Merge pull request #1594 from datafaker-net/fix/1593-singapore-id-number
#1593 fix Singapore ID number generation
2 parents 641ea02 + a6ec8df commit d725193

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

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

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import net.datafaker.providers.base.IdNumber.IdNumberRequest;
55
import net.datafaker.providers.base.PersonIdNumber;
66
import net.datafaker.providers.base.PersonIdNumber.Gender;
7-
import net.datafaker.service.RandomService;
87

98
import java.time.LocalDate;
109

@@ -42,7 +41,7 @@ private static String format(LocalDate issueDate, boolean citizen, int[] randomD
4241
return id.toString();
4342
}
4443

45-
private static final int[] CODE = {0, 2, 7, 6, 5, 4, 3, 2};
44+
private static final int[] CODE = {2, 7, 6, 5, 4, 3, 2};
4645
private static final String FIN_LETTERS = "XWUTRQPNMLK";
4746
private static final String UIN_LETTERS = "JZIHGFEDCBA";
4847

@@ -60,7 +59,7 @@ public PersonIdNumber generateValid(BaseProviders faker, IdNumberRequest request
6059
}
6160

6261
private static PersonIdNumber generateValidIdNumber(BaseProviders faker, LocalDate birthDate, boolean citizen, Gender gender) {
63-
int[] number = randomDigits(faker);
62+
int[] number = faker.number().randomDigits(7);
6463
String idNumber = format(birthDate, citizen, number);
6564
return new PersonIdNumber(idNumber, birthDate, gender);
6665
}
@@ -89,15 +88,6 @@ static LocalDate randomBirthDate(BaseProviders faker, Type type) {
8988
};
9089
}
9190

92-
private static int[] randomDigits(BaseProviders f) {
93-
final RandomService random = f.random();
94-
final int[] number = new int[7];
95-
for (int i = 0; i < number.length; i++) {
96-
number[i] = random.nextInt(0, 9);
97-
}
98-
return number;
99-
}
100-
10191
static char centuryPrefixCitizen(LocalDate issueDate) {
10292
int century = issueDate.getYear() / 100;
10393
return (char) ('A' + century - 1);

src/main/java/net/datafaker/providers/base/Number.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,17 @@ public int randomDigit() {
2323
return faker.random().nextInt(0, 9);
2424
}
2525

26+
/**
27+
* Returns an array of random numbers from 0 to 9 (both inclusive) of given length
28+
*/
29+
public int[] randomDigits(int length) {
30+
int[] result = new int[length];
31+
for (int i = 0; i < length; i++) {
32+
result[i] = randomDigit();
33+
}
34+
return result;
35+
}
36+
2637
/**
2738
* Returns a random number from 1-9 (both inclusive)
2839
*/

src/test/java/net/datafaker/providers/base/NumberTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.apache.commons.lang3.tuple.Pair;
44
import org.junit.jupiter.api.RepeatedTest;
55
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.params.ParameterizedTest;
7+
import org.junit.jupiter.params.provider.ValueSource;
68

79
import java.math.BigDecimal;
810
import java.util.HashMap;
@@ -40,6 +42,17 @@ void testRandomDigit() {
4042
assertThat(nums).contains(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
4143
}
4244

45+
@ParameterizedTest
46+
@ValueSource(ints = {0, 1, 2, 3, 4, 8, 16, 25, 36})
47+
void randomDigits(int length) {
48+
final Number number = faker.number();
49+
int[] value = number.randomDigits(length);
50+
assertThat(value).hasSize(length);
51+
for (int i = 0; i < length; i++) {
52+
assertThat(value[i]).isLessThanOrEqualTo(9).isGreaterThanOrEqualTo(0);
53+
}
54+
}
55+
4356
@Test
4457
void testRandomDigitNotZero() {
4558
Set<Integer> nums = new HashSet<>(10);

0 commit comments

Comments
 (0)