Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3632506
commit c2d477a
Showing
19 changed files
with
900 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package com.devskiller.jfairy; | ||
|
||
import com.devskiller.jfairy.data.DataMaster; | ||
import com.devskiller.jfairy.producer.RandomGenerator; | ||
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider; | ||
import com.devskiller.jfairy.producer.company.locale.sk.SkVATIdentificationNumberProvider; | ||
import com.devskiller.jfairy.producer.person.AddressProvider; | ||
import com.devskiller.jfairy.producer.person.NationalIdentificationNumberFactory; | ||
import com.devskiller.jfairy.producer.person.NationalIdentityCardNumberProvider; | ||
import com.devskiller.jfairy.producer.person.PassportNumberProvider; | ||
import com.devskiller.jfairy.producer.person.locale.sk.SkAddressProvider; | ||
import com.devskiller.jfairy.producer.person.locale.sk.SkNationalIdentificationNumberFactory; | ||
import com.devskiller.jfairy.producer.person.locale.sk.SkNationalIdentityCardNumberProvider; | ||
import com.devskiller.jfairy.producer.person.locale.sk.SkPassportNumberProvider; | ||
|
||
public class SkFairyModule extends FairyModule { | ||
|
||
public SkFairyModule(DataMaster dataMaster, RandomGenerator randomGenerator) { | ||
super(dataMaster, randomGenerator); | ||
} | ||
|
||
@Override | ||
protected void configure() { | ||
super.configure(); | ||
bind(NationalIdentificationNumberFactory.class).to(SkNationalIdentificationNumberFactory.class); | ||
bind(NationalIdentityCardNumberProvider.class).to(SkNationalIdentityCardNumberProvider.class); | ||
bind(VATIdentificationNumberProvider.class).to(SkVATIdentificationNumberProvider.class); | ||
bind(AddressProvider.class).to(SkAddressProvider.class); | ||
bind(PassportNumberProvider.class).to(SkPassportNumberProvider.class); | ||
} | ||
|
||
} |
142 changes: 142 additions & 0 deletions
142
...a/com/devskiller/jfairy/producer/company/locale/sk/SkVATIdentificationNumberProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
package com.devskiller.jfairy.producer.company.locale.sk; | ||
|
||
import javax.inject.Inject; | ||
|
||
import com.google.common.annotations.VisibleForTesting; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import com.devskiller.jfairy.producer.BaseProducer; | ||
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider; | ||
|
||
import static java.lang.String.format; | ||
import static java.lang.String.valueOf; | ||
import static org.apache.commons.lang3.StringUtils.leftPad; | ||
|
||
/** | ||
* Polish VAT Identification Number (known as NIP Numer Identyfikacji Podatkowej in Poland) | ||
* <p> | ||
* https://en.wikipedia.org/wiki/VAT_identification_number | ||
*/ | ||
public class SkVATIdentificationNumberProvider implements VATIdentificationNumberProvider { | ||
|
||
private static final Logger LOG = LoggerFactory.getLogger(SkVATIdentificationNumberProvider.class); | ||
|
||
// ex 1234563218 | ||
private static final int NIP_LENGTH = 10; | ||
|
||
// ex 123-456-32-18 | ||
private static final int FORMATTED_NIP_LENGTH = 13; | ||
|
||
private static final int[] CODES = { | ||
101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, | ||
124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146, | ||
147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 164, 165, 166, 167, 168, 169, | ||
171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 191, 192, 193, | ||
194, 195, 196, 197, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, | ||
217, 218, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239, | ||
241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263, | ||
264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286, | ||
287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 301, 302, 311, 312, 313, 314, 315, 316, 317, 318, | ||
319, 321, 322, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342, | ||
343, 344, 345, 346, 347, 348, 349, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 363, 364, 365, | ||
366, 367, 368, 369, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 388, | ||
389, 391, 392, 393, 394, 395, 396, 397, 398, 399, 411, 412, 413, 414, 415, 416, 417, 418, 419, 421, 422, | ||
423, 424, 425, 426, 427, 428, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 441, 442, 443, 444, 445, | ||
446, 447, 448, 449, 451, 452, 453, 454, 455, 456, 457, 458, 459, 461, 462, 463, 464, 465, 466, 467, 468, | ||
469, 471, 472, 473, 474, 475, 476, 477, 478, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 491, 492, | ||
493, 494, 495, 496, 497, 498, 499, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 516, | ||
519, 521, 522, 523, 524, 525, 526, 527, 528, 529, 531, 532, 533, 534, 535, 536, 537, 538, 539, 541, 542, | ||
543, 544, 545, 546, 547, 548, 549, 551, 552, 553, 554, 555, 556, 557, 558, 559, 561, 562, 563, 564, 565, | ||
566, 567, 568, 569, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 588, | ||
589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 601, 602, 603, 604, 605, 606, 607, 608, 609, 611, 612, | ||
613, 614, 615, 616, 617, 618, 619, 621, 622, 623, 624, 625, 626, 627, 628, 629, 631, 632, 633, 634, 635, | ||
636, 637, 638, 639, 641, 642, 643, 644, 645, 646, 647, 648, 649, 651, 652, 653, 654, 655, 656, 657, 658, | ||
659, 661, 662, 663, 664, 665, 666, 667, 668, 669, 671, 672, 673, 674, 675, 676, 677, 678, 679, 681, 682, | ||
683, 684, 685, 686, 687, 688, 689, 691, 692, 693, 694, 695, 696, 697, 698, 699, 701, 711, 712, 713, 714, | ||
715, 716, 717, 718, 719, 721, 722, 723, 724, 725, 726, 727, 728, 729, 731, 732, 733, 734, 735, 736, 737, | ||
738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 751, 752, 753, 754, 755, 756, 757, 758, 759, 761, | ||
762, 763, 764, 765, 766, 767, 768, 769, 771, 772, 773, 774, 775, 776, 777, 778, 779, 781, 782, 783, 784, | ||
785, 786, 787, 788, 789, 791, 792, 793, 794, 795, 796, 797, 798, 799, 811, 812, 813, 814, 815, 816, 817, | ||
818, 819, 821, 822, 823, 824, 825, 826, 827, 828, 829, 831, 832, 833, 834, 835, 836, 837, 838, 839, 841, | ||
842, 843, 844, 845, 846, 847, 848, 849, 851, 852, 853, 854, 855, 856, 857, 858, 859, 861, 862, 863, 864, | ||
865, 866, 867, 868, 869, 871, 872, 873, 874, 875, 876, 877, 878, 879, 881, 882, 883, 884, 885, 886, 887, | ||
888, 889, 891, 892, 893, 894, 895, 896, 897, 898, 899, 911, 912, 913, 914, 915, 916, 917, 918, 919, 921, | ||
922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 941, 942, 943, 944, | ||
945, 946, 947, 948, 949, 951, 952, 953, 954, 955, 956, 957, 958, 959, 961, 962, 963, 964, 965, 966, 967, | ||
968, 969, 971, 972, 973, 974, 975, 976, 977, 978, 979, 981, 982, 983, 984, 985, 986, 987, 988, 989, 991, | ||
992, 993, 994, 995, 996, 997, 998 | ||
}; | ||
private static final int[] WEIGHTS = {6, 5, 7, 2, 3, 4, 5, 6, 7}; | ||
|
||
// 123______8 | ||
private static final int SERIAL_NUMBER_SIZE = 6; | ||
private static final int MAX_SERIAL_NUMBER = 999999; | ||
|
||
// 1234563_18 | ||
private static final int CHECKSUM_CHAR_INDEX = 9; | ||
static final int MODULO11 = 11; | ||
public static final int TEN = 10; | ||
|
||
private final BaseProducer baseProducer; | ||
|
||
@Inject | ||
public SkVATIdentificationNumberProvider(BaseProducer baseProducer) { | ||
|
||
this.baseProducer = baseProducer; | ||
} | ||
|
||
@Override | ||
public String get() { | ||
int checkSum; | ||
String number; | ||
do { | ||
number = generateNumber(); | ||
checkSum = calculateChecksum(number); | ||
// numbers with checkSum == 10 are invalid | ||
} while (checkSum == TEN); | ||
return number + checkSum; | ||
} | ||
|
||
private String generateNumber() { | ||
String prefix = valueOf(CODES[baseProducer.randomInt(CODES.length - 1)]); | ||
|
||
String number = leftPad(valueOf(baseProducer.randomInt(MAX_SERIAL_NUMBER)), SERIAL_NUMBER_SIZE, "0"); | ||
|
||
return prefix + number; | ||
} | ||
|
||
// TODO: Move to separate module | ||
@VisibleForTesting | ||
public static boolean isValid(String nip) { | ||
String normalizedNip = normalizeNip(nip); | ||
if (normalizedNip.length() != NIP_LENGTH) { | ||
return false; | ||
} | ||
try { | ||
int checksum = calculateChecksum(normalizedNip); | ||
return checksum == normalizedNip.charAt(CHECKSUM_CHAR_INDEX) - '0'; | ||
} catch (NumberFormatException e) { | ||
LOG.debug(format("Invalid nip %s", nip), e); | ||
return false; | ||
} | ||
} | ||
|
||
private static String normalizeNip(String value) { | ||
if (value.length() == FORMATTED_NIP_LENGTH) { | ||
return value.replaceAll("-", ""); | ||
} | ||
return value; | ||
} | ||
|
||
private static int calculateChecksum(String nip) { | ||
char[] chars = nip.toCharArray(); | ||
int sum = 0; | ||
for (int i = 0; i < WEIGHTS.length; i++) { | ||
sum += (chars[i] - '0') * WEIGHTS[i]; | ||
} | ||
return sum % MODULO11; | ||
} | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkAddress.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
|
||
package com.devskiller.jfairy.producer.person.locale.sk; | ||
|
||
import com.devskiller.jfairy.producer.person.locale.ContinentalAddress; | ||
|
||
public class SkAddress extends ContinentalAddress { | ||
|
||
public SkAddress(String street, String streetNumber, String apartmentNumber, String postalCode, String city) { | ||
super(street, streetNumber, apartmentNumber, postalCode, city); | ||
} | ||
|
||
@Override | ||
protected String getApartmentMark() { | ||
return ", "; | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkAddressProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package com.devskiller.jfairy.producer.person.locale.sk; | ||
|
||
import com.devskiller.jfairy.data.DataMaster; | ||
import com.devskiller.jfairy.producer.BaseProducer; | ||
import com.devskiller.jfairy.producer.person.AbstractAddressProvider; | ||
|
||
import javax.inject.Inject; | ||
|
||
public class SkAddressProvider extends AbstractAddressProvider { | ||
|
||
@Inject | ||
public SkAddressProvider(DataMaster dataMaster, BaseProducer baseProducer) { | ||
super(dataMaster, baseProducer); | ||
} | ||
|
||
@Override | ||
public SkAddress get() { | ||
return new SkAddress(getStreet(), getStreetNumber(), getApartmentNumber(), | ||
getPostalCode(), getCity()); | ||
} | ||
|
||
} |
26 changes: 26 additions & 0 deletions
26
...om/devskiller/jfairy/producer/person/locale/sk/SkNationalIdentificationNumberFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package com.devskiller.jfairy.producer.person.locale.sk; | ||
|
||
import com.devskiller.jfairy.producer.BaseProducer; | ||
import com.devskiller.jfairy.producer.DateProducer; | ||
import com.devskiller.jfairy.producer.person.NationalIdentificationNumberFactory; | ||
import com.devskiller.jfairy.producer.person.NationalIdentificationNumberProperties; | ||
|
||
import javax.inject.Inject; | ||
|
||
public class SkNationalIdentificationNumberFactory implements NationalIdentificationNumberFactory { | ||
|
||
private final BaseProducer baseProducer; | ||
private final DateProducer dateProducer; | ||
|
||
@Inject | ||
public SkNationalIdentificationNumberFactory(BaseProducer baseProducer, DateProducer dateProducer) { | ||
this.baseProducer = baseProducer; | ||
this.dateProducer = dateProducer; | ||
} | ||
|
||
@Override | ||
public SkNationalIdentificationNumberProvider produceNationalIdentificationNumberProvider(NationalIdentificationNumberProperties.Property... properties) { | ||
return new SkNationalIdentificationNumberProvider(dateProducer, baseProducer, properties); | ||
} | ||
|
||
} |
Oops, something went wrong.