| 148 |
lars |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
namespace Faker\Provider\pl_PL;
|
|
|
4 |
|
|
|
5 |
/**
|
|
|
6 |
* Most popular first and last names published by Ministry of the Interior:
|
|
|
7 |
*
|
|
|
8 |
* @see https://msw.gov.pl/pl/sprawy-obywatelskie/ewidencja-ludnosci-dowo/statystyki-imion-i-nazw
|
|
|
9 |
*/
|
|
|
10 |
class Person extends \Faker\Provider\Person
|
|
|
11 |
{
|
|
|
12 |
protected static $lastNameFormat = [
|
|
|
13 |
'{{lastNameMale}}',
|
|
|
14 |
'{{lastNameFemale}}',
|
|
|
15 |
];
|
|
|
16 |
|
|
|
17 |
protected static $maleNameFormats = [
|
|
|
18 |
'{{firstNameMale}} {{lastNameMale}}',
|
|
|
19 |
'{{firstNameMale}} {{lastNameMale}}',
|
|
|
20 |
'{{firstNameMale}} {{lastNameMale}}',
|
|
|
21 |
'{{title}} {{firstNameMale}} {{lastNameMale}}',
|
|
|
22 |
'{{firstNameMale}} {{lastNameMale}}',
|
|
|
23 |
'{{title}} {{title}} {{firstNameMale}} {{lastNameMale}}',
|
|
|
24 |
];
|
|
|
25 |
|
|
|
26 |
protected static $femaleNameFormats = [
|
|
|
27 |
'{{firstNameFemale}} {{lastNameFemale}}',
|
|
|
28 |
'{{firstNameFemale}} {{lastNameFemale}}',
|
|
|
29 |
'{{firstNameFemale}} {{lastNameFemale}}',
|
|
|
30 |
'{{title}} {{firstNameFemale}} {{lastNameFemale}}',
|
|
|
31 |
'{{firstNameFemale}} {{lastNameFemale}}',
|
|
|
32 |
'{{title}} {{title}} {{firstNameFemale}} {{lastNameFemale}}',
|
|
|
33 |
];
|
|
|
34 |
|
|
|
35 |
protected static $firstNameMale = [
|
|
|
36 |
'Adam', 'Adrian', 'Alan', 'Albert', 'Aleks', 'Aleksander', 'Alex', 'Andrzej', 'Antoni', 'Arkadiusz', 'Artur',
|
|
|
37 |
'Bartek', 'Błażej', 'Borys', 'Bruno', 'Cezary', 'Cyprian', 'Damian', 'Daniel', 'Dariusz', 'Dawid', 'Dominik',
|
|
|
38 |
'Emil', 'Ernest', 'Eryk', 'Fabian', 'Filip', 'Franciszek', 'Fryderyk', 'Gabriel', 'Grzegorz', 'Gustaw', 'Hubert',
|
|
|
39 |
'Ignacy', 'Igor', 'Iwo', 'Jacek', 'Jakub', 'Jan', 'Jeremi', 'Jerzy', 'Jędrzej', 'Józef', 'Julian', 'Juliusz',
|
|
|
40 |
'Kacper', 'Kajetan', 'Kamil', 'Karol', 'Kazimierz', 'Konrad', 'Konstanty', 'Kornel', 'Krystian', 'Krzysztof', 'Ksawery',
|
|
|
41 |
'Leon', 'Leonard', 'Łukasz', 'Maciej', 'Maks', 'Maksymilian', 'Marcel', 'Marcin', 'Marek', 'Mariusz', 'Mateusz', 'Maurycy',
|
|
|
42 |
'Michał', 'Mieszko', 'Mikołaj', 'Miłosz', 'Natan', 'Nataniel', 'Nikodem', 'Norbert', 'Olaf', 'Olgierd', 'Oliwier', 'Oskar',
|
|
|
43 |
'Patryk', 'Paweł', 'Piotr', 'Przemysław', 'Radosław', 'Rafał', 'Robert', 'Ryszard', 'Sebastian', 'Stanisław', 'Stefan', 'Szymon',
|
|
|
44 |
'Tadeusz', 'Tomasz', 'Tymon', 'Tymoteusz', 'Wiktor', 'Witold', 'Wojciech',
|
|
|
45 |
];
|
|
|
46 |
|
|
|
47 |
protected static $firstNameFemale = [
|
|
|
48 |
'Ada', 'Adrianna', 'Agata', 'Agnieszka', 'Aleksandra', 'Alicja', 'Amelia', 'Anastazja', 'Angelika', 'Aniela', 'Anita',
|
|
|
49 |
'Anna', 'Anna', 'Antonina', 'Apolonia', 'Aurelia', 'Barbara', 'Bianka', 'Blanka', 'Dagmara', 'Daria', 'Dominika', 'Dorota',
|
|
|
50 |
'Eliza', 'Elżbieta', 'Emilia', 'Ewa', 'Ewelina', 'Gabriela', 'Hanna', 'Helena', 'Ida', 'Iga', 'Inga', 'Izabela',
|
|
|
51 |
'Jagoda', 'Janina', 'Joanna', 'Julia', 'Julianna', 'Julita', 'Justyna', 'Kaja', 'Kalina', 'Kamila', 'Karina', 'Karolina',
|
|
|
52 |
'Katarzyna', 'Kinga', 'Klara', 'Klaudia', 'Kornelia', 'Krystyna', 'Laura', 'Lena', 'Lidia', 'Liliana', 'Liwia', 'Łucja',
|
|
|
53 |
'Magdalena', 'Maja', 'Malwina', 'Małgorzata', 'Marcelina', 'Maria', 'Marianna', 'Marika', 'Marta', 'Martyna', 'Matylda',
|
|
|
54 |
'Melania', 'Michalina', 'Milena', 'Monika', 'Nadia', 'Natalia', 'Natasza', 'Nela', 'Nicole', 'Nikola', 'Nina',
|
|
|
55 |
'Olga', 'Oliwia', 'Patrycja', 'Paulina', 'Pola', 'Roksana', 'Rozalia', 'Róża', 'Sandra', 'Sara', 'Sonia', 'Sylwia',
|
|
|
56 |
'Tola', 'Urszula', 'Weronika', 'Wiktoria', 'Zofia', 'Zuzanna',
|
|
|
57 |
];
|
|
|
58 |
|
|
|
59 |
protected static $lastNameMale = [
|
|
|
60 |
'Adamczyk', 'Adamski', 'Andrzejewski', 'Baran', 'Baranowski', 'Bąk', 'Błaszczyk', 'Borkowski', 'Borowski', 'Brzeziński',
|
|
|
61 |
'Chmielewski', 'Cieślak', 'Czarnecki', 'Czerwiński', 'Dąbrowski', 'Duda', 'Dudek', 'Gajewski', 'Głowacki', 'Górski', 'Grabowski',
|
|
|
62 |
'Jabłoński', 'Jakubowski', 'Jankowski', 'Jasiński', 'Jaworski', 'Kaczmarczyk', 'Kaczmarek', 'Kalinowski', 'Kamiński', 'Kaźmierczak',
|
|
|
63 |
'Kołodziej', 'Konieczny', 'Kowalczyk', 'Kowalski', 'Kozłowski', 'Krajewski', 'Krawczyk', 'Król', 'Krupa', 'Kubiak', 'Kucharski', 'Kwiatkowski',
|
|
|
64 |
'Laskowski', 'Lewandowski', 'Lis', 'Maciejewski', 'Majewski', 'Makowski', 'Malinowski', 'Marciniak', 'Mazur', 'Mazurek', 'Michalak',
|
|
|
65 |
'Michalski', 'Mróz', 'Nowak', 'Nowakowski', 'Nowicki', 'Olszewski', 'Ostrowski', 'Pawlak', 'Pawłowski', 'Pietrzak', 'Piotrowski', 'Przybylski',
|
|
|
66 |
'Rutkowski', 'Sadowski', 'Sawicki', 'Sikora', 'Sikorski', 'Sobczak', 'Sokołowski', 'Stępień', 'Szczepański', 'Szewczyk', 'Szulc', 'Szymański', 'Szymczak',
|
|
|
67 |
'Tomaszewski', 'Urbański', 'Walczak', 'Wasilewski', 'Wieczorek', 'Wilk', 'Wiśniewski', 'Witkowski', 'Włodarczyk', 'Wojciechowski',
|
|
|
68 |
'Woźniak', 'Wójcik', 'Wróbel', 'Wróblewski', 'Wysocki', 'Zając', 'Zakrzewski', 'Zalewski', 'Zawadzki', 'Zieliński', 'Ziółkowski',
|
|
|
69 |
];
|
|
|
70 |
|
|
|
71 |
protected static $lastNameFemale = [
|
|
|
72 |
'Adamczyk', 'Adamska', 'Andrzejewska', 'Baran', 'Baranowska', 'Bąk', 'Błaszczyk', 'Borkowska', 'Borowska', 'Brzezińska',
|
|
|
73 |
'Chmielewska', 'Cieślak', 'Czarnecka', 'Czerwińska', 'Dąbrowska', 'Duda', 'Dudek', 'Gajewska', 'Głowacka', 'Górecka', 'Górska', 'Grabowska',
|
|
|
74 |
'Jabłońska', 'Jakubowska', 'Jankowska', 'Jasińska', 'Jaworska', 'Kaczmarczyk', 'Kaczmarek', 'Kalinowska', 'Kamińska', 'Kaźmierczak',
|
|
|
75 |
'Kołodziej', 'Kowalczyk', 'Kowalska', 'Kozłowska', 'Krajewska', 'Krawczyk', 'Król', 'Krupa', 'Kubiak', 'Kucharska', 'Kwiatkowska',
|
|
|
76 |
'Laskowska', 'Lewandowska', 'Lis', 'Maciejewska', 'Majewska', 'Makowska', 'Malinowska', 'Marciniak', 'Mazur', 'Mazurek', 'Michalak',
|
|
|
77 |
'Michalska', 'Mróz', 'Nowak', 'Nowakowska', 'Nowicka', 'Olszewska', 'Ostrowska', 'Pawlak', 'Pawłowska', 'Pietrzak', 'Piotrowska', 'Przybylska',
|
|
|
78 |
'Rutkowska', 'Sadowska', 'Sawicka', 'Sikora', 'Sikorska', 'Sobczak', 'Sokołowska', 'Stępień', 'Szczepańska', 'Szewczyk', 'Szulc', 'Szymańska', 'Szymczak',
|
|
|
79 |
'Tomaszewska', 'Urbańska', 'Walczak', 'Wasilewska', 'Wieczorek', 'Wilk', 'Wiśniewska', 'Witkowska', 'Włodarczyk', 'Wojciechowska',
|
|
|
80 |
'Woźniak', 'Wójcik', 'Wróbel', 'Wróblewska', 'Wysocka', 'Zając', 'Zakrzewska', 'Zalewska', 'Zawadzka', 'Zielińska', 'Ziółkowska',
|
|
|
81 |
];
|
|
|
82 |
|
|
|
83 |
/**
|
|
|
84 |
* Unisex academic degree
|
|
|
85 |
*
|
|
|
86 |
* @var string[]
|
|
|
87 |
*/
|
|
|
88 |
protected static $title = ['mgr', 'inż.', 'dr', 'doc.'];
|
|
|
89 |
|
|
|
90 |
/**
|
|
|
91 |
* @param string|null $gender 'male', 'female' or null for any
|
|
|
92 |
*
|
|
|
93 |
* @example 'Adamczyk'
|
|
|
94 |
*/
|
|
|
95 |
public function lastName($gender = null)
|
|
|
96 |
{
|
|
|
97 |
if ($gender === static::GENDER_MALE) {
|
|
|
98 |
return static::lastNameMale();
|
|
|
99 |
}
|
|
|
100 |
|
|
|
101 |
if ($gender === static::GENDER_FEMALE) {
|
|
|
102 |
return static::lastNameFemale();
|
|
|
103 |
}
|
|
|
104 |
|
|
|
105 |
return $this->generator->parse(static::randomElement(static::$lastNameFormat));
|
|
|
106 |
}
|
|
|
107 |
|
|
|
108 |
public static function lastNameMale()
|
|
|
109 |
{
|
|
|
110 |
return static::randomElement(static::$lastNameMale);
|
|
|
111 |
}
|
|
|
112 |
|
|
|
113 |
public static function lastNameFemale()
|
|
|
114 |
{
|
|
|
115 |
return static::randomElement(static::$lastNameFemale);
|
|
|
116 |
}
|
|
|
117 |
|
|
|
118 |
public function title($gender = null)
|
|
|
119 |
{
|
|
|
120 |
return static::randomElement(static::$title);
|
|
|
121 |
}
|
|
|
122 |
|
|
|
123 |
/**
|
|
|
124 |
* replaced by specific unisex Polish title
|
|
|
125 |
*/
|
|
|
126 |
public static function titleMale()
|
|
|
127 |
{
|
|
|
128 |
return static::randomElement(static::$title);
|
|
|
129 |
}
|
|
|
130 |
|
|
|
131 |
/**
|
|
|
132 |
* replaced by specific unisex Polish title
|
|
|
133 |
*/
|
|
|
134 |
public static function titleFemale()
|
|
|
135 |
{
|
|
|
136 |
return static::randomElement(static::$title);
|
|
|
137 |
}
|
|
|
138 |
|
|
|
139 |
/**
|
|
|
140 |
* PESEL - Universal Electronic System for Registration of the Population
|
|
|
141 |
*
|
|
|
142 |
* @see http://en.wikipedia.org/wiki/PESEL
|
|
|
143 |
*
|
|
|
144 |
* @param DateTime $birthdate
|
|
|
145 |
* @param string $sex M for male or F for female
|
|
|
146 |
*
|
|
|
147 |
* @return string 11 digit number, like 44051401358
|
|
|
148 |
*/
|
|
|
149 |
public static function pesel($birthdate = null, $sex = null)
|
|
|
150 |
{
|
|
|
151 |
if ($birthdate === null) {
|
|
|
152 |
$birthdate = \Faker\Provider\DateTime::dateTimeThisCentury();
|
|
|
153 |
}
|
|
|
154 |
|
|
|
155 |
$weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];
|
|
|
156 |
$length = count($weights);
|
|
|
157 |
|
|
|
158 |
$fullYear = (int) $birthdate->format('Y');
|
|
|
159 |
$year = (int) $birthdate->format('y');
|
|
|
160 |
$month = $birthdate->format('m') + (((int) ($fullYear / 100) - 14) % 5) * 20;
|
|
|
161 |
$day = $birthdate->format('d');
|
|
|
162 |
|
|
|
163 |
$result = [(int) ($year / 10), $year % 10, (int) ($month / 10), $month % 10, (int) ($day / 10), $day % 10];
|
|
|
164 |
|
|
|
165 |
for ($i = 6; $i < $length; ++$i) {
|
|
|
166 |
$result[$i] = static::randomDigit();
|
|
|
167 |
}
|
|
|
168 |
|
|
|
169 |
$result[$length - 1] |= 1;
|
|
|
170 |
|
|
|
171 |
if ($sex == 'F') {
|
|
|
172 |
$result[$length - 1] -= 1;
|
|
|
173 |
}
|
|
|
174 |
|
|
|
175 |
$checksum = 0;
|
|
|
176 |
|
|
|
177 |
for ($i = 0; $i < $length; ++$i) {
|
|
|
178 |
$checksum += $weights[$i] * $result[$i];
|
|
|
179 |
}
|
|
|
180 |
$checksum = (10 - ($checksum % 10)) % 10;
|
|
|
181 |
$result[] = $checksum;
|
|
|
182 |
|
|
|
183 |
return implode('', $result);
|
|
|
184 |
}
|
|
|
185 |
|
|
|
186 |
/**
|
|
|
187 |
* National Identity Card number
|
|
|
188 |
*
|
|
|
189 |
* @see http://en.wikipedia.org/wiki/Polish_National_Identity_Card
|
|
|
190 |
*
|
|
|
191 |
* @return string 3 letters and 6 digits, like ABA300000
|
|
|
192 |
*/
|
|
|
193 |
public static function personalIdentityNumber()
|
|
|
194 |
{
|
|
|
195 |
$range = str_split('ABCDEFGHIJKLMNPRSTUVWXYZ');
|
|
|
196 |
$low = ['A', static::randomElement($range), static::randomElement($range)];
|
|
|
197 |
$high = [static::randomDigit(), static::randomDigit(), static::randomDigit(), static::randomDigit(), static::randomDigit()];
|
|
|
198 |
$weights = [7, 3, 1, 7, 3, 1, 7, 3];
|
|
|
199 |
$checksum = 0;
|
|
|
200 |
|
|
|
201 |
for ($i = 0, $size = count($low); $i < $size; ++$i) {
|
|
|
202 |
$checksum += $weights[$i] * (ord($low[$i]) - 55);
|
|
|
203 |
}
|
|
|
204 |
|
|
|
205 |
for ($i = 0, $size = count($high); $i < $size; ++$i) {
|
|
|
206 |
$checksum += $weights[$i + 3] * $high[$i];
|
|
|
207 |
}
|
|
|
208 |
$checksum %= 10;
|
|
|
209 |
|
|
|
210 |
return implode('', $low) . $checksum . implode('', $high);
|
|
|
211 |
}
|
|
|
212 |
|
|
|
213 |
/**
|
|
|
214 |
* Taxpayer Identification Number (NIP in Polish)
|
|
|
215 |
*
|
|
|
216 |
* @see http://en.wikipedia.org/wiki/PESEL#Other_identifiers
|
|
|
217 |
* @see http://pl.wikipedia.org/wiki/NIP
|
|
|
218 |
*
|
|
|
219 |
* @return string 10 digit number
|
|
|
220 |
*/
|
|
|
221 |
public static function taxpayerIdentificationNumber()
|
|
|
222 |
{
|
|
|
223 |
$weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];
|
|
|
224 |
$result = [];
|
|
|
225 |
|
|
|
226 |
do {
|
|
|
227 |
$result = [
|
|
|
228 |
static::randomDigitNotNull(), static::randomDigitNotNull(), static::randomDigitNotNull(),
|
|
|
229 |
static::randomDigit(), static::randomDigit(), static::randomDigit(),
|
|
|
230 |
static::randomDigit(), static::randomDigit(), static::randomDigit(),
|
|
|
231 |
];
|
|
|
232 |
$checksum = 0;
|
|
|
233 |
|
|
|
234 |
for ($i = 0, $size = count($result); $i < $size; ++$i) {
|
|
|
235 |
$checksum += $weights[$i] * $result[$i];
|
|
|
236 |
}
|
|
|
237 |
$checksum %= 11;
|
|
|
238 |
} while ($checksum == 10);
|
|
|
239 |
$result[] = $checksum;
|
|
|
240 |
|
|
|
241 |
return implode('', $result);
|
|
|
242 |
}
|
|
|
243 |
}
|