From 49ac1fe8658be9f291be35261d6ee4dcfc8691da Mon Sep 17 00:00:00 2001 From: Krzysztof Grabania Date: Wed, 14 Mar 2018 13:30:47 +0100 Subject: [PATCH 1/3] Fix polish PESEL faker --- src/Faker/Provider/pl_PL/Person.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Faker/Provider/pl_PL/Person.php b/src/Faker/Provider/pl_PL/Person.php index c6b2402e52..380f4d9f7b 100644 --- a/src/Faker/Provider/pl_PL/Person.php +++ b/src/Faker/Provider/pl_PL/Person.php @@ -159,11 +159,12 @@ public static function pesel($birthdate = null, $sex = null) for ($i = 6; $i < $length; $i++) { $result[$i] = static::randomDigit(); } - if ($sex == "M") { - $result[$length - 1] |= 1; - } elseif ($sex == "F") { - $result[$length - 1] ^= 1; + + $result[$length - 1] |= 1; + if ($sex == "F") { + $result[$length - 1] -= 1; } + $checksum = 0; for ($i = 0; $i < $length; $i++) { $checksum += $weights[$i] * $result[$i]; From 0856c99597944d2e0ebf16bd7ac3fd42f29bee3b Mon Sep 17 00:00:00 2001 From: Krzysztof Grabania Date: Wed, 14 Mar 2018 13:32:11 +0100 Subject: [PATCH 2/3] Add polish PESEL tests --- test/Faker/Provider/pl_PL/PersonTest.php | 101 +++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 test/Faker/Provider/pl_PL/PersonTest.php diff --git a/test/Faker/Provider/pl_PL/PersonTest.php b/test/Faker/Provider/pl_PL/PersonTest.php new file mode 100644 index 0000000000..0d167f681c --- /dev/null +++ b/test/Faker/Provider/pl_PL/PersonTest.php @@ -0,0 +1,101 @@ +addProvider(new Person($faker)); + $this->faker = $faker; + } + + public function testPeselLenght() + { + $pesel = $this->faker->pesel(); + + $this->assertEquals(11, strlen($pesel)); + } + + public function testPeselDate() + { + $date = new DateTime('1990-01-01'); + $pesel = $this->faker->pesel($date); + + $this->assertEquals('90', substr($pesel, 0, 2)); + $this->assertEquals('01', substr($pesel, 2, 2)); + $this->assertEquals('01', substr($pesel, 4, 2)); + } + + public function testPeselDateWithYearAfter2000() + { + $date = new DateTime('2001-01-01'); + $pesel = $this->faker->pesel($date); + + $this->assertEquals('01', substr($pesel, 0, 2)); + $this->assertEquals('21', substr($pesel, 2, 2)); + $this->assertEquals('01', substr($pesel, 4, 2)); + } + + public function testPeselDateWithYearAfter2100() + { + $date = new DateTime('2101-01-01'); + $pesel = $this->faker->pesel($date); + + $this->assertEquals('01', substr($pesel, 0, 2)); + $this->assertEquals('41', substr($pesel, 2, 2)); + $this->assertEquals('01', substr($pesel, 4, 2)); + } + + public function testPeselDateWithYearAfter2200() + { + $date = new DateTime('2201-01-01'); + $pesel = $this->faker->pesel($date); + + $this->assertEquals('01', substr($pesel, 0, 2)); + $this->assertEquals('61', substr($pesel, 2, 2)); + $this->assertEquals('01', substr($pesel, 4, 2)); + } + + public function testPeselDateWithYearBefore1900() + { + $date = new DateTime('1801-01-01'); + $pesel = $this->faker->pesel($date); + + $this->assertEquals('01', substr($pesel, 0, 2)); + $this->assertEquals('81', substr($pesel, 2, 2)); + $this->assertEquals('01', substr($pesel, 4, 2)); + } + + public function testPeselSex() + { + $male = $this->faker->pesel(null, 'M'); + $female = $this->faker->pesel(null, 'F'); + + $this->assertEquals(1, $male[9] % 2); + $this->assertEquals(0, $female[9] % 2); + } + + public function testPeselCheckSum() + { + $pesel = $this->faker->pesel(); + $weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1]; + $sum = 0; + + foreach ($weights as $key => $weight) { + $sum += $pesel[$key] * $weight; + } + + $this->assertEquals(0, $sum % 10); + } +} From cbdce8cc5ee36b23f72ac2c91e5b1abfe994e7d5 Mon Sep 17 00:00:00 2001 From: Krzysztof Grabania Date: Wed, 14 Mar 2018 13:44:59 +0100 Subject: [PATCH 3/3] Fix for Travis PHP5.3 --- test/Faker/Provider/pl_PL/PersonTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Faker/Provider/pl_PL/PersonTest.php b/test/Faker/Provider/pl_PL/PersonTest.php index 0d167f681c..e5e0edc17f 100644 --- a/test/Faker/Provider/pl_PL/PersonTest.php +++ b/test/Faker/Provider/pl_PL/PersonTest.php @@ -89,7 +89,7 @@ public function testPeselSex() public function testPeselCheckSum() { $pesel = $this->faker->pesel(); - $weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1]; + $weights = array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1); $sum = 0; foreach ($weights as $key => $weight) {