Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Faker\Provider\pl_PL;
4
 
5
use Faker\Provider\Base;
6
 
7
/**
8
 * Generator of Polish vehicle registration numbers.
9
 * {@link} http://prawo.sejm.gov.pl/isap.nsf/DocDetails.xsp?id=WDU20170002355
10
 * {@link} https://pl.wikipedia.org/wiki/Tablice_rejestracyjne_w_Polsce#Tablice_standardowe
11
 */
12
class LicensePlate extends Base
13
{
14
    /**
15
     * @var array list of Polish voivodeships and respective vehicle registration number prefixes.
16
     */
17
    protected static $voivodeships = [
18
        'dolnośląskie' => 'D',
19
        'kujawsko-pomorskie' => 'C',
20
        'lubelskie' => 'L',
21
        'lubuskie' => 'F',
22
        'łódzkie' => 'E',
23
        'małopolskie' => 'K',
24
        'mazowieckie' => 'W',
25
        'opolskie' => 'O',
26
        'podkarpackie' => 'R',
27
        'podlaskie' => 'B',
28
        'pomorskie' => 'G',
29
        'śląskie' => 'S',
30
        'świętokrzyskie' => 'T',
31
        'warmińsko-mazurskie' => 'N',
32
        'wielkopolskie' => 'P',
33
        'zachodniopomorskie' => 'Z',
34
    ];
35
 
36
    /**
37
     * @var array list of special vehicle registration number prefixes.
38
     */
39
    protected static $specials = [
40
        'army' => 'U',
41
        'services' => 'H',
42
    ];
43
 
44
    /**
45
     * @var array list of Polish counties and respective vehicle registration number prefixes.
46
     */
47
    protected static $counties = [
48
        'D' => [
49
            'Jelenia Góra' => ['J'],
50
            'Legnica' => ['L'],
51
            'Wałbrzych' => ['B'],
52
            'Wrocław' => ['W', 'X'],
53
            'bolesławiecki' => ['BL'],
54
            'dzierżoniowski' => ['DZ'],
55
            'głogowski' => ['GL'],
56
            'górowski' => ['GR'],
57
            'jaworski' => ['JA'],
58
            'jeleniogórski' => ['JE'],
59
            'kamiennogórski' => ['KA'],
60
            'kłodzki' => ['KL'],
61
            'legnicki' => ['LE'],
62
            'lubański' => ['LB'],
63
            'lubiński' => ['LU'],
64
            'lwówecki' => ['LW'],
65
            'milicki' => ['MI'],
66
            'oleśnicki' => ['OL'],
67
            'oławski' => ['OA'],
68
            'polkowicki' => ['PL'],
69
            'strzeliński' => ['ST'],
70
            'średzki' => ['SR'],
71
            'świdnicki' => ['SW'],
72
            'trzebnicki' => ['TR'],
73
            'wałbrzyski' => ['BA'],
74
            'wołowski' => ['WL'],
75
            'wrocławski' => ['WR'],
76
            'ząbkowicki' => ['ZA'],
77
            'zgorzelecki' => ['ZG'],
78
            'złotoryjski' => ['ZL'],
79
        ],
80
        'C' => [
81
            'Bydgoszcz' => ['B'],
82
            'Grudziądz' => ['G'],
83
            'Toruń' => ['T'],
84
            'Włocławek' => ['W'],
85
            'aleksandrowski' => ['AL'],
86
            'brodnicki' => ['BR'],
87
            'bydgoski' => ['BY'],
88
            'chełmiński' => ['CH'],
89
            'golubsko-dobrzyński' => ['GD'],
90
            'grudziądzki' => ['GR'],
91
            'inowrocławski' => ['IN'],
92
            'lipnowski' => ['LI'],
93
            'mogileński' => ['MG'],
94
            'nakielski' => ['NA'],
95
            'radziejowski' => ['RA'],
96
            'rypiński' => ['RY'],
97
            'sępoleński' => ['SE'],
98
            'świecki' => ['SW'],
99
            'toruński' => ['TR'],
100
            'tucholski' => ['TU'],
101
            'wąbrzeski' => ['WA'],
102
            'włocławski' => ['WL'],
103
            'żniński' => ['ZN'],
104
        ],
105
        'L' => [
106
            'Biała Podlaska' => ['B'],
107
            'Chełm' => ['C'],
108
            'Lublin' => ['U'],
109
            'Zamość' => ['Z'],
110
            'bialski' => ['BI'],
111
            'biłgorajski' => ['BL'],
112
            'chełmski' => ['CH'],
113
            'hrubieszowski' => ['HR'],
114
            'janowski' => ['JA'],
115
            'krasnostawski' => ['KS'],
116
            'kraśnicki' => ['KR'],
117
            'lubartowski' => ['LB'],
118
            'lubelski' => ['UB'],
119
            'łęczyński' => ['LE'],
120
            'łukowski' => ['LU'],
121
            'opolski' => ['OP'],
122
            'parczewski' => ['PA'],
123
            'puławski' => ['PU'],
124
            'radzyński' => ['RA'],
125
            'rycki' => ['RY'],
126
            'świdnicki' => ['SW'],
127
            'tomaszowski' => ['TM'],
128
            'włodawski' => ['WL'],
129
            'zamojski' => ['ZA'],
130
        ],
131
        'F' => [
132
            'Gorzów Wielkopolski' => ['G'],
133
            'Zielona Góra' => ['Z'],
134
            'gorzowski' => ['GW'],
135
            'krośnieński' => ['KR'],
136
            'międzyrzecki' => ['MI'],
137
            'nowosolski' => ['NW'],
138
            'słubicki' => ['SL'],
139
            'strzelecko-drezdenecki' => ['SD'],
140
            'sulęciński' => ['SU'],
141
            'świebodziński' => ['SW'],
142
            'wschowski' => ['WS'],
143
            'zielonogórski' => ['ZI'],
144
            'żagański' => ['ZG'],
145
            'żarski' => ['ZA'],
146
        ],
147
        'E' => [
148
            'Łódź' => ['L'],
149
            'Piotrków Trybunalski' => ['P'],
150
            'Skierniewice' => ['S'],
151
            'brzeziński' => ['BR'],
152
            'bełchatowski' => ['BE'],
153
            'kutnowski' => ['KU'],
154
            'łaski' => ['LA'],
155
            'łęczycki' => ['LE'],
156
            'łowicki' => ['LC'],
157
            'łódzki wschodni' => ['LW'],
158
            'opoczyński' => ['OP'],
159
            'pabianicki' => ['PA'],
160
            'pajęczański' => ['PJ'],
161
            'piotrkowski' => ['PI'],
162
            'poddębicki' => ['PD'],
163
            'radomszczański' => ['RA'],
164
            'rawski' => ['RW'],
165
            'sieradzki' => ['SI'],
166
            'skierniewicki' => ['SK'],
167
            'tomaszowski' => ['TM'],
168
            'wieluński' => ['WI'],
169
            'wieruszowski' => ['WE'],
170
            'zduńskowolski' => ['ZD'],
171
            'zgierski' => ['ZG'],
172
        ],
173
        'K' => [
174
            'Kraków' => ['R'],
175
            'Nowy Sącz' => ['N'],
176
            'Tarnów' => ['T'],
177
            'bocheński' => ['BA', 'BC'],
178
            'brzeski' => ['BR'],
179
            'chrzanowski' => ['CH'],
180
            'dąbrowski' => ['DA'],
181
            'gorlicki' => ['GR'],
182
            'krakowski' => ['RA'],
183
            'limanowski' => ['LI'],
184
            'miechowski' => ['MI'],
185
            'myślenicki' => ['MY'],
186
            'nowosądecki' => ['NS'],
187
            'nowotarski' => ['NT'],
188
            'olkuski' => ['OL'],
189
            'oświęcimski' => ['OS'],
190
            'proszowicki' => ['PR'],
191
            'suski' => ['SU'],
192
            'tarnowski' => ['TA'],
193
            'tatrzański' => ['TT'],
194
            'wadowicki' => ['WA'],
195
            'wielicki' => ['WI'],
196
        ],
197
        'W' => [
198
            'Ostrołęka' => ['O'],
199
            'Płock' => ['P'],
200
            'Radom' => ['R'],
201
            'Siedlce' => ['S'],
202
            'białobrzeski' => ['BR'],
203
            'ciechanowski' => ['CI'],
204
            'garwoliński' => ['G'],
205
            'gostyniński' => ['GS'],
206
            'grodziski' => ['GM'],
207
            'grójecki' => ['GR'],
208
            'kozienicki' => ['KZ'],
209
            'legionowski' => ['L'],
210
            'lipski' => ['LI'],
211
            'łosicki' => ['LS'],
212
            'makowski' => ['MA'],
213
            'miński' => ['M'],
214
            'mławski' => ['ML'],
215
            'nowodworski' => ['ND'],
216
            'ostrołęcki' => ['OS'],
217
            'ostrowski' => ['OR'],
218
            'otwocki' => ['OT'],
219
            'piaseczyński' => ['PA', 'PI'],
220
            'płocki' => ['PL'],
221
            'płoński' => ['PN'],
222
            'pruszkowski' => ['PP', 'PR', 'PS'],
223
            'przasnyski' => ['PZ'],
224
            'przysuski' => ['PY'],
225
            'pułtuski' => ['PU'],
226
            'radomski' => ['RA'],
227
            'siedlecki' => ['SI'],
228
            'sierpecki' => ['SE'],
229
            'sochaczewski' => ['SC'],
230
            'sokołowski' => ['SK'],
231
            'szydłowiecki' => ['SZ'],
232
            'warszawski' => ['A', 'B', 'D', 'E', 'F', 'H', 'I', 'J', 'K', 'N', 'T', 'U', 'W', 'X', 'Y'],
233
            'warszawski zachodni' => ['Z'],
234
            'węgrowski' => ['WE'],
235
            'wołomiński' => ['WL', 'V'],
236
            'wyszkowski' => ['WY'],
237
            'zwoleński' => ['ZW'],
238
            'żuromiński' => ['ZU'],
239
            'żyrardowski' => ['ZY'],
240
        ],
241
        'O' => [
242
            'Opole' => ['P'],
243
            'brzeski' => ['B'],
244
            'głubczycki' => ['GL'],
245
            'kędzierzyńsko-kozielski' => ['K'],
246
            'kluczborski' => ['KL'],
247
            'krapkowicki' => ['KR'],
248
            'namysłowski' => ['NA'],
249
            'nyski' => ['NY'],
250
            'oleski' => ['OL'],
251
            'opolski' => ['PO'],
252
            'prudnicki' => ['PR'],
253
            'strzelecki' => ['ST'],
254
        ],
255
        'R' => [
256
            'Krosno' => ['K'],
257
            'Przemyśl' => ['P'],
258
            'Rzeszów' => ['Z'],
259
            'Tarnobrzeg' => ['T'],
260
            'bieszczadzki' => ['BI'],
261
            'brzozowski' => ['BR'],
262
            'dębicki' => ['DE'],
263
            'jarosławski' => ['JA'],
264
            'jasielski' => ['JS'],
265
            'kolbuszowski' => ['KL'],
266
            'krośnieński' => ['KR'],
267
            'leski' => ['LS'],
268
            'leżajski' => ['LE'],
269
            'lubaczowski' => ['LU'],
270
            'łańcucki' => ['LA'],
271
            'mielecki' => ['MI'],
272
            'niżański' => ['NI'],
273
            'przemyski' => ['PR'],
274
            'przeworski' => ['PZ'],
275
            'ropczycko-sędziszowski' => ['RS'],
276
            'rzeszowski' => ['ZE'],
277
            'sanocki' => ['SA'],
278
            'stalowowolski' => ['ST'],
279
            'strzyżowski' => ['SR'],
280
            'tarnobrzeski' => ['TA'],
281
        ],
282
        'B' => [
283
            'Białystok' => ['I'],
284
            'Łomża' => ['L'],
285
            'Suwałki' => ['S'],
286
            'augustowski' => ['AU'],
287
            'białostocki' => ['IA'],
288
            'bielski' => ['BI'],
289
            'grajewski' => ['GR'],
290
            'hajnowski' => ['HA'],
291
            'kolneński' => ['KL'],
292
            'łomżyński' => ['LM'],
293
            'moniecki' => ['MN'],
294
            'sejneński' => ['SE'],
295
            'siemiatycki' => ['SI'],
296
            'sokólski' => ['SK'],
297
            'suwalski' => ['SU'],
298
            'wysokomazowiecki' => ['WM'],
299
            'zambrowski' => ['ZA'],
300
        ],
301
        'G' => [
302
            'Gdańsk' => ['D'],
303
            'Gdynia' => ['A'],
304
            'Słupsk' => ['S'],
305
            'Sopot' => ['SP'],
306
            'bytowski' => ['BY'],
307
            'chojnicki' => ['CH'],
308
            'człuchowski' => ['CZ'],
309
            'gdański' => ['DA'],
310
            'kartuski' => ['KY', 'KA'],
311
            'kościerski' => ['KS'],
312
            'kwidzyński' => ['KW'],
313
            'lęborski' => ['LE'],
314
            'malborski' => ['MB'],
315
            'nowodworski' => ['ND'],
316
            'pucki' => ['PU'],
317
            'słupski' => ['SL'],
318
            'starogardzki' => ['ST'],
319
            'sztumski' => ['SZ'],
320
            'tczewski' => ['TC'],
321
            'wejherowski' => ['WE', 'WO'],
322
        ],
323
        'S' => [
324
            'Bielsko-Biała' => ['B'],
325
            'Bytom' => ['Y'],
326
            'Chorzów' => ['H'],
327
            'Częstochowa' => ['C'],
328
            'Dąbrowa Górnicza' => ['D'],
329
            'Gliwice' => ['G'],
330
            'Jastrzębie-Zdrój' => ['JZ'],
331
            'Jaworzno' => ['J'],
332
            'Katowice' => ['K'],
333
            'Mysłowice' => ['M'],
334
            'Piekary Śląskie' => ['PI'],
335
            'Ruda Śląska,' => ['L', 'RS'],
336
            'Rybnik' => ['R'],
337
            'Siemianowice Śląskie' => ['I'],
338
            'Sosnowiec' => ['O'],
339
            'Świętochłowice' => ['W'],
340
            'Tychy' => ['T'],
341
            'Zabrze' => ['Z'],
342
            'Żory' => ['ZO'],
343
            'będziński' => ['BE'],
344
            'bielski' => ['BI'],
345
            'cieszyński' => ['CN', 'CI'],
346
            'częstochowski' => ['CZ'],
347
            'gliwicki' => ['GL'],
348
            'kłobucki' => ['KL'],
349
            'lubliniecki' => ['LU'],
350
            'mikołowski' => ['MI'],
351
            'myszkowski' => ['MY'],
352
            'pszczyński' => ['PS'],
353
            'raciborski' => ['RC'],
354
            'rybnicki' => ['RB'],
355
            'tarnogórski' => ['TA'],
356
            'bieruńsko - lędziński' => ['BL'],
357
            'wodzisławski' => ['WD', 'WZ'],
358
            'zawierciański' => ['ZA'],
359
            'żywiecki' => ['ZY'],
360
        ],
361
        'T' => [
362
            'Kielce' => ['K'],
363
            'buski' => ['BU'],
364
            'jędrzejowski' => ['JE'],
365
            'kazimierski' => ['KA'],
366
            'kielecki' => ['KI'],
367
            'konecki' => ['KN'],
368
            'opatowski' => ['OP'],
369
            'ostrowiecki' => ['OS'],
370
            'pińczowski' => ['PI'],
371
            'sandomierski' => ['SA'],
372
            'skarżyski' => ['SK'],
373
            'starachowicki' => ['ST'],
374
            'staszowski' => ['SZ'],
375
            'włoszczowski' => ['LW'],
376
        ],
377
        'N' => [
378
            'Elbląg' => ['E'],
379
            'Olsztyn' => ['O'],
380
            'bartoszycki' => ['BA'],
381
            'braniewski' => ['BR'],
382
            'działdowski' => ['DZ'],
383
            'elbląski' => ['EB'],
384
            'ełcki' => ['EL'],
385
            'giżycki' => ['GI'],
386
            'iławski' => ['IL'],
387
            'kętrzyński' => ['KE'],
388
            'lidzbarski' => ['LI'],
389
            'mrągowski' => ['MR'],
390
            'nidzicki' => ['NI'],
391
            'nowomiejski' => ['NM'],
392
            'olecki' => ['OE'],
393
            'gołdapski' => ['GO'],
394
            'olsztyński' => ['OL'],
395
            'ostródzki' => ['OS'],
396
            'piski' => ['PI'],
397
            'szczycieński' => ['SZ'],
398
            'węgorzewski' => ['WE'],
399
        ],
400
        'P' => [
401
            'Kalisz' => ['A', 'K'],
402
            'Konin' => ['KO', 'N'],
403
            'Leszno' => ['L'],
404
            'Poznań' => ['O', 'Y'],
405
            'chodzieski' => ['CH'],
406
            'czarnkowsko-trzcianecki' => ['CT'],
407
            'gnieźnieński' => ['GN'],
408
            'gostyński' => ['GS'],
409
            'grodziski' => ['GO'],
410
            'jarociński' => ['JA'],
411
            'kaliski' => ['KA'],
412
            'kępiński' => ['KE'],
413
            'kolski' => ['KL'],
414
            'koniński' => ['KN'],
415
            'kościański' => ['KS'],
416
            'krotoszyński' => ['KR'],
417
            'leszczyński' => ['LE'],
418
            'międzychodzki' => ['MI'],
419
            'nowotomyski' => ['NT'],
420
            'obornicki' => ['OB'],
421
            'ostrowski' => ['OS'],
422
            'ostrzeszowski' => ['OT'],
423
            'pilski' => ['P'],
424
            'pleszewski' => ['PL'],
425
            'poznański' => ['OZ', 'Z'],
426
            'rawicki' => ['RA'],
427
            'słupecki' => ['SL'],
428
            'szamotulski' => ['SZ'],
429
            'średzki' => ['SR'],
430
            'śremski' => ['SE'],
431
            'turecki' => ['TU'],
432
            'wągrowiecki' => ['WA'],
433
            'wolsztyński' => ['WL'],
434
            'wrzesiński' => ['WR'],
435
            'złotowski' => ['ZL'],
436
        ],
437
        'Z' => [
438
            'Koszalin' => ['K'],
439
            'Szczecin' => ['S', 'Z'],
440
            'Świnoujście' => ['SW'],
441
            'białogardzki' => ['BI'],
442
            'choszczeński' => ['CH'],
443
            'drawski' => ['DR'],
444
            'goleniowski' => ['GL'],
445
            'gryficki' => ['GY'],
446
            'gryfiński' => ['GR'],
447
            'kamieński' => ['KA'],
448
            'kołobrzeski' => ['KL'],
449
            'koszaliński' => ['KO'],
450
            'łobeski' => ['LO'],
451
            'myśliborski' => ['MY'],
452
            'policki' => ['PL'],
453
            'pyrzycki' => ['PY'],
454
            'sławieński' => ['SL'],
455
            'stargardzki' => ['ST'],
456
            'szczecinecki' => ['SZ'],
457
            'świdwiński' => ['SD'],
458
            'wałecki' => ['WA'],
459
        ],
460
        'U' => [
461
            'Siły Zbrojne Rzeczypospolitej Polskiej' => ['A', 'B', 'C', 'D', 'E', 'G', 'I', 'J', 'K', 'L'],
462
        ],
463
        'H' => [
464
            'Centralne Biuro Antykorupcyjne' => ['A'],
465
            'Służba Ochrony Państwa' => ['BA', 'BB', 'BE', 'BF', 'BG'],
466
            'Służba Celno-Skarbowa' => ['CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'CG', 'CH', 'CJ', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CR'],
467
            'Agencja Bezpieczeństwa Wewnętrznego' => ['K'],
468
            'Agencja Wywiadu' => ['K'],
469
            'Służba Kontrwywiadu Wojskowego' => ['M'],
470
            'Służba Wywiadu Wojskowego' => ['M'],
471
            'Policja' => ['PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PG', 'PH', 'PJ', 'PK', 'PL', 'PL', 'PL', 'PL', 'PL', 'PM', 'PN', 'PP', 'PS', 'PT', 'PU', 'PW', 'PZ'],
472
            'Straż Graniczna' => ['WA', 'WK'],
473
        ],
474
    ];
475
 
476
    /**
477
     * @var array list of regex expressions matching Polish license plate suffixess when county code is 1 character long.
478
     */
479
    protected static $plateSuffixesGroup1 = [
480
        '\d{5}',
481
        '\d{4}[A-PR-Z]',
482
        '\d{3}[A-PR-Z]{2}',
483
        '[1-9][A-PR-Z]\d{3}',
484
        '[1-9][A-PR-Z]{2}\d{2}',
485
    ];
486
 
487
    /**
488
     * @var array list of regex expressions matching Polish license plate suffixess when county code is 2 characters long.
489
     */
490
    protected static $plateSuffixesGroup2 = [
491
        '[A-PR-Z]\d{3}',
492
        '\d{2}[A-PR-Z]{2}',
493
        '[1-9][A-PR-Z]\d{2}',
494
        '\d{2}[A-PR-Z][1-9]',
495
        '[1-9][A-PR-Z]{2}[1-9]',
496
        '[A-PR-Z]{2}\d{2}',
497
        '\d{5}',
498
        '\d{4}[A-PR-Z]',
499
        '\d{3}[A-PR-Z]{2}',
500
        '[A-PR-Z]\d{2}[A-PR-Z]',
501
        '[A-PR-Z][1-9][A-PR-Z]{2}',
502
    ];
503
 
504
    /**
505
     * Generates random license plate.
506
     *
507
     * @param bool       $special      whether special license plates should be included
508
     * @param array|null $voivodeships list of voivodeships license plate should be generated from
509
     * @param array|null $counties     list of counties license plate should be generated from
510
     */
511
    public static function licensePlate(
512
        bool $special = false,
513
        ?array $voivodeships = null,
514
        ?array $counties = null
515
    ): string {
516
        $voivodeshipsAvailable = static::$voivodeships + ($special ? static::$specials : []);
517
        $voivodeshipCode = static::selectRandomArea($voivodeshipsAvailable, $voivodeships);
518
 
519
        $countiesAvailable = static::$counties[$voivodeshipCode];
520
        $countySelected = self::selectRandomArea($countiesAvailable, $counties);
521
 
522
        $countyCode = static::randomElement($countySelected);
523
 
524
        $suffix = static::regexify(static::randomElement(strlen($countyCode) === 1 ? static::$plateSuffixesGroup1 : static::$plateSuffixesGroup2));
525
 
526
        return "{$voivodeshipCode}{$countyCode} {$suffix}";
527
    }
528
 
529
    /**
530
     * Selects random area from the list of available and requested.
531
     */
532
    protected static function selectRandomArea(array $available, ?array $requested)
533
    {
534
        $requested = array_intersect(array_keys($available), $requested ?? []);
535
 
536
        if (empty($requested)) {
537
            $requested = array_keys($available);
538
        }
539
 
540
        return $available[static::randomElement($requested)];
541
    }
542
}