查看/编辑 代码
内容
<?php namespace Faker\Provider\pl_PL; use Faker\Provider\Base; /** * Generator of Polish vehicle registration numbers. * {@link} https://isap.sejm.gov.pl/isap.nsf/DocDetails.xsp?id=WDU20220001847 * {@link} https://pl.wikipedia.org/wiki/Tablice_rejestracyjne_w_Polsce#Tablice_standardowe */ class LicensePlate extends Base { /** * @var array list of Polish voivodeships and respective vehicle registration number prefixes. */ protected static $voivodeships = [ 'dolno艣l膮skie' => ['D', 'V'], 'kujawsko-pomorskie' => ['C'], 'lubelskie' => ['L'], 'lubuskie' => ['F'], '艂贸dzkie' => ['E'], 'ma艂opolskie' => ['K', 'J'], 'mazowieckie' => ['W', 'A'], 'opolskie' => ['O'], 'podkarpackie' => ['R', 'Y'], 'podlaskie' => ['B'], 'pomorskie' => ['G', 'X'], '艣l膮skie' => ['S', 'I'], '艣wi臋tokrzyskie' => ['T'], 'warmi艅sko-mazurskie' => ['N'], 'wielkopolskie' => ['P', 'M'], 'zachodniopomorskie' => ['Z'], ]; /** * @var array list of special vehicle registration number prefixes. */ protected static $specials = [ 'army' => ['U'], 'services' => ['H'], ]; /** * @var array list of Polish counties and respective vehicle registration number prefixes. */ protected static $counties = [ 'dolno艣l膮skie' => [ 'Jelenia G贸ra' => ['J'], 'Legnica' => ['L'], 'Wa艂brzych' => ['B'], 'Wroc艂aw' => ['W', 'X'], 'boles艂awiecki' => ['BL'], 'dzier偶oniowski' => ['DZ'], 'g艂ogowski' => ['GL'], 'g贸rowski' => ['GR'], 'jaworski' => ['JA'], 'jeleniog贸rski' => ['JE'], 'kamiennog贸rski' => ['KA'], 'k艂odzki' => ['KL'], 'legnicki' => ['LE'], 'luba艅ski' => ['LB'], 'lubi艅ski' => ['LU'], 'lw贸wecki' => ['LW'], 'milicki' => ['MI'], 'ole艣nicki' => ['OL'], 'o艂awski' => ['OA'], 'polkowicki' => ['PL'], 'strzeli艅ski' => ['ST'], '艣redzki' => ['SR'], '艣widnicki' => ['SW'], 'trzebnicki' => ['TR'], 'wa艂brzyski' => ['BA'], 'wo艂owski' => ['WL'], 'wroc艂awski' => ['WR'], 'z膮bkowicki' => ['ZA'], 'zgorzelecki' => ['ZG'], 'z艂otoryjski' => ['ZL'], ], 'kujawsko-pomorskie' => [ 'Bydgoszcz' => ['B'], 'Grudzi膮dz' => ['G'], 'Toru艅' => ['T'], 'W艂oc艂awek' => ['W'], 'aleksandrowski' => ['AL'], 'brodnicki' => ['BR'], 'bydgoski' => ['BY'], 'che艂mi艅ski' => ['CH'], 'golubsko-dobrzy艅ski' => ['GD'], 'grudzi膮dzki' => ['GR'], 'inowroc艂awski' => ['IN'], 'lipnowski' => ['LI'], 'mogile艅ski' => ['MG'], 'nakielski' => ['NA'], 'radziejowski' => ['RA'], 'rypi艅ski' => ['RY'], 's臋pole艅ski' => ['SE'], '艣wiecki' => ['SW'], 'toru艅ski' => ['TR'], 'tucholski' => ['TU'], 'w膮brzeski' => ['WA'], 'w艂oc艂awski' => ['WL'], '偶ni艅ski' => ['ZN'], ], 'lubelskie' => [ 'Bia艂a Podlaska' => ['B'], 'Che艂m' => ['C'], 'Lublin' => ['U'], 'Zamo艣膰' => ['Z'], 'bialski' => ['BI'], 'bi艂gorajski' => ['BL'], 'che艂mski' => ['CH'], 'hrubieszowski' => ['HR'], 'janowski' => ['JA'], 'krasnostawski' => ['KS'], 'kra艣nicki' => ['KR'], 'lubartowski' => ['LB'], 'lubelski' => ['UB'], '艂臋czy艅ski' => ['LE'], '艂ukowski' => ['LU'], 'opolski' => ['OP'], 'parczewski' => ['PA'], 'pu艂awski' => ['PU'], 'radzy艅ski' => ['RA'], 'rycki' => ['RY'], '艣widnicki' => ['SW'], 'tomaszowski' => ['TM'], 'w艂odawski' => ['WL'], 'zamojski' => ['ZA'], ], 'lubuskie' => [ 'Gorz贸w Wielkopolski' => ['G'], 'Zielona G贸ra' => ['Z'], 'gorzowski' => ['GW'], 'kro艣nie艅ski' => ['KR'], 'mi臋dzyrzecki' => ['MI'], 'nowosolski' => ['NW'], 's艂ubicki' => ['SL'], 'strzelecko-drezdenecki' => ['SD'], 'sul臋ci艅ski' => ['SU'], '艣wiebodzi艅ski' => ['SW'], 'wschowski' => ['WS'], 'zielonog贸rski' => ['ZI'], '偶aga艅ski' => ['ZG'], '偶arski' => ['ZA'], ], '艂贸dzkie' => [ '艁贸d藕' => ['L', 'D'], 'Piotrk贸w Trybunalski' => ['P'], 'Skierniewice' => ['S'], 'brzezi艅ski' => ['BR'], 'be艂chatowski' => ['BE'], 'kutnowski' => ['KU'], '艂aski' => ['LA'], '艂臋czycki' => ['LE'], '艂owicki' => ['LC'], '艂贸dzki wschodni' => ['LW'], 'opoczy艅ski' => ['OP'], 'pabianicki' => ['PA'], 'paj臋cza艅ski' => ['PJ'], 'piotrkowski' => ['PI'], 'podd臋bicki' => ['PD'], 'radomszcza艅ski' => ['RA'], 'rawski' => ['RW'], 'sieradzki' => ['SI'], 'skierniewicki' => ['SK'], 'tomaszowski' => ['TM'], 'wielu艅ski' => ['WI'], 'wieruszowski' => ['WE'], 'zdu艅skowolski' => ['ZD'], 'zgierski' => ['ZG'], ], 'ma艂opolskie' => [ 'Krak贸w' => ['R', 'K'], 'Nowy S膮cz' => ['N'], 'Tarn贸w' => ['T'], 'boche艅ski' => ['BA', 'BC'], 'brzeski' => ['BR'], 'chrzanowski' => ['CH'], 'd膮browski' => ['DA'], 'gorlicki' => ['GR'], 'krakowski' => ['RA', 'RK'], 'limanowski' => ['LI'], 'miechowski' => ['MI'], 'my艣lenicki' => ['MY'], 'nowos膮decki' => ['NS'], 'nowotarski' => ['NT'], 'olkuski' => ['OL'], 'o艣wi臋cimski' => ['OS'], 'proszowicki' => ['PR'], 'suski' => ['SU'], 'tarnowski' => ['TA'], 'tatrza艅ski' => ['TT'], 'wadowicki' => ['WA'], 'wielicki' => ['WI'], ], 'mazowieckie' => [ 'Ostro艂臋ka' => ['O'], 'P艂ock' => ['P'], 'Radom' => ['R'], 'Siedlce' => ['S'], 'bia艂obrzeski' => ['BR'], 'ciechanowski' => ['CI'], 'garwoli艅ski' => ['G'], 'gostyni艅ski' => ['GS'], 'grodziski' => ['GM'], 'gr贸jecki' => ['GR'], 'kozienicki' => ['KZ'], 'legionowski' => ['L'], 'lipski' => ['LI'], '艂osicki' => ['LS'], 'makowski' => ['MA'], 'mi艅ski' => ['M'], 'm艂awski' => ['ML'], 'nowodworski' => ['ND'], 'ostro艂臋cki' => ['OS'], 'ostrowski' => ['OR'], 'otwocki' => ['OT'], 'piaseczy艅ski' => ['PA', 'PI', 'PW', 'PX'], 'p艂ocki' => ['PL'], 'p艂o艅ski' => ['PN'], 'pruszkowski' => ['PP', 'PR', 'PS'], 'przasnyski' => ['PZ'], 'przysuski' => ['PY'], 'pu艂tuski' => ['PU'], 'radomski' => ['RA'], 'siedlecki' => ['SI'], 'sierpecki' => ['SE'], 'sochaczewski' => ['SC'], 'soko艂owski' => ['SK'], 'szyd艂owiecki' => ['SZ'], 'warszawski' => ['A', 'B', 'D', 'E', 'F', 'H', 'I', 'J', 'K', 'N', 'T', 'U', 'W', 'X', 'Y'], 'warszawski zachodni' => ['Z'], 'w臋growski' => ['WE'], 'wo艂omi艅ski' => ['WL', 'V'], 'wyszkowski' => ['WY'], 'zwole艅ski' => ['ZW'], '偶uromi艅ski' => ['ZU'], '偶yrardowski' => ['ZY'], ], 'opolskie' => [ 'Opole' => ['P'], 'brzeski' => ['B'], 'g艂ubczycki' => ['GL'], 'k臋dzierzy艅sko-kozielski' => ['K'], 'kluczborski' => ['KL'], 'krapkowicki' => ['KR'], 'namys艂owski' => ['NA'], 'nyski' => ['NY'], 'oleski' => ['OL'], 'opolski' => ['PO'], 'prudnicki' => ['PR'], 'strzelecki' => ['ST'], ], 'podkarpackie' => [ 'Krosno' => ['K'], 'Przemy艣l' => ['P'], 'Rzesz贸w' => ['Z'], 'Tarnobrzeg' => ['T'], 'bieszczadzki' => ['BI'], 'brzozowski' => ['BR'], 'd臋bicki' => ['DE'], 'jaros艂awski' => ['JA'], 'jasielski' => ['JS'], 'kolbuszowski' => ['KL'], 'kro艣nie艅ski' => ['KR'], 'leski' => ['LS'], 'le偶ajski' => ['LE'], 'lubaczowski' => ['LU'], '艂a艅cucki' => ['LA'], 'mielecki' => ['MI'], 'ni偶a艅ski' => ['NI'], 'przemyski' => ['PR'], 'przeworski' => ['PZ'], 'ropczycko-s臋dziszowski' => ['RS'], 'rzeszowski' => ['ZE', 'ZR', 'ZZ'], 'sanocki' => ['SA'], 'stalowowolski' => ['ST'], 'strzy偶owski' => ['SR'], 'tarnobrzeski' => ['TA'], ], 'podlaskie' => [ 'Bia艂ystok' => ['I'], '艁om偶a' => ['L'], 'Suwa艂ki' => ['S'], 'augustowski' => ['AU'], 'bia艂ostocki' => ['IA', 'IB'], 'bielski' => ['BI'], 'grajewski' => ['GR'], 'hajnowski' => ['HA'], 'kolne艅ski' => ['KL'], '艂om偶y艅ski' => ['LM'], 'moniecki' => ['MN'], 'sejne艅ski' => ['SE'], 'siemiatycki' => ['SI'], 'sok贸lski' => ['SK'], 'suwalski' => ['SU'], 'wysokomazowiecki' => ['WM'], 'zambrowski' => ['ZA'], ], 'pomorskie' => [ 'Gda艅sk' => ['D'], 'Gdynia' => ['A'], 'S艂upsk' => ['S'], 'Sopot' => ['SP'], 'bytowski' => ['BY'], 'chojnicki' => ['CH'], 'cz艂uchowski' => ['CZ'], 'gda艅ski' => ['DA'], 'kartuski' => ['KA', 'KY', 'KZ'], 'ko艣cierski' => ['KS'], 'kwidzy艅ski' => ['KW'], 'l臋borski' => ['LE'], 'malborski' => ['MB'], 'nowodworski' => ['ND'], 'pucki' => ['PU'], 's艂upski' => ['SL'], 'starogardzki' => ['ST'], 'sztumski' => ['SZ'], 'tczewski' => ['TC'], 'wejherowski' => ['WE', 'WO'], ], '艣l膮skie' => [ 'Bielsko-Bia艂a' => ['B'], 'Bytom' => ['Y'], 'Chorz贸w' => ['H'], 'Cz臋stochowa' => ['C'], 'D膮browa G贸rnicza' => ['D'], 'Gliwice' => ['G'], 'Jastrz臋bie-Zdr贸j' => ['JZ'], 'Jaworzno' => ['J'], 'Katowice' => ['K'], 'Mys艂owice' => ['M'], 'Piekary 艢l膮skie' => ['PI'], 'Ruda 艢l膮ska,' => ['L', 'RS'], 'Rybnik' => ['R'], 'Siemianowice 艢l膮skie' => ['I'], 'Sosnowiec' => ['O'], '艢wi臋toch艂owice' => ['W'], 'Tychy' => ['T'], 'Zabrze' => ['Z'], '呕ory' => ['ZO'], 'b臋dzi艅ski' => ['BE', 'BN', 'E'], 'bielski' => ['BI'], 'cieszy艅ski' => ['CI', 'CN'], 'cz臋stochowski' => ['CZ'], 'gliwicki' => ['GL'], 'k艂obucki' => ['KL'], 'lubliniecki' => ['LU'], 'miko艂owski' => ['MI'], 'myszkowski' => ['MY'], 'pszczy艅ski' => ['PS'], 'raciborski' => ['RC'], 'rybnicki' => ['RB'], 'tarnog贸rski' => ['TA'], 'bieru艅sko - l臋dzi艅ski' => ['BL'], 'wodzis艂awski' => ['WD', 'WZ'], 'zawiercia艅ski' => ['ZA'], '偶ywiecki' => ['ZY'], ], '艣wi臋tokrzyskie' => [ 'Kielce' => ['K'], 'buski' => ['BU'], 'j臋drzejowski' => ['JE'], 'kazimierski' => ['KA'], 'kielecki' => ['KI'], 'konecki' => ['KN'], 'opatowski' => ['OP'], 'ostrowiecki' => ['OS'], 'pi艅czowski' => ['PI'], 'sandomierski' => ['SA'], 'skar偶yski' => ['SK'], 'starachowicki' => ['ST'], 'staszowski' => ['SZ'], 'w艂oszczowski' => ['LW'], ], 'warmi艅sko-mazurskie' => [ 'Elbl膮g' => ['E'], 'Olsztyn' => ['O'], 'bartoszycki' => ['BA'], 'braniewski' => ['BR'], 'dzia艂dowski' => ['DZ'], 'elbl膮ski' => ['EB'], 'e艂cki' => ['EL'], 'gi偶ycki' => ['GI'], 'i艂awski' => ['IL'], 'k臋trzy艅ski' => ['KE'], 'lidzbarski' => ['LI'], 'mr膮gowski' => ['MR'], 'nidzicki' => ['NI'], 'nowomiejski' => ['NM'], 'olecki' => ['OE'], 'go艂dapski' => ['GO'], 'olszty艅ski' => ['OL'], 'ostr贸dzki' => ['OS'], 'piski' => ['PI'], 'szczycie艅ski' => ['SZ'], 'w臋gorzewski' => ['WE'], ], 'wielkopolskie' => [ 'Kalisz' => ['A', 'K'], 'Konin' => ['KO', 'N'], 'Leszno' => ['L'], 'Pozna艅' => ['O', 'Y'], 'chodzieski' => ['CH'], 'czarnkowsko-trzcianecki' => ['CT'], 'gnie藕nie艅ski' => ['GN'], 'gosty艅ski' => ['GS'], 'grodziski' => ['GO'], 'jaroci艅ski' => ['JA'], 'kaliski' => ['KA'], 'k臋pi艅ski' => ['KE'], 'kolski' => ['KL'], 'koni艅ski' => ['KN'], 'ko艣cia艅ski' => ['KS'], 'krotoszy艅ski' => ['KR'], 'leszczy艅ski' => ['LE'], 'mi臋dzychodzki' => ['MI'], 'nowotomyski' => ['NT'], 'obornicki' => ['OB'], 'ostrowski' => ['OS'], 'ostrzeszowski' => ['OT'], 'pilski' => ['P'], 'pleszewski' => ['PL'], 'pozna艅ski' => ['OZ', 'Z'], 'rawicki' => ['RA'], 's艂upecki' => ['SL'], 'szamotulski' => ['SZ'], '艣redzki' => ['SR'], '艣remski' => ['SE'], 'turecki' => ['TU'], 'w膮growiecki' => ['WA'], 'wolszty艅ski' => ['WL'], 'wrzesi艅ski' => ['WR'], 'z艂otowski' => ['ZL'], ], 'zachodniopomorskie' => [ 'Koszalin' => ['K'], 'Szczecin' => ['S', 'Z'], '艢winouj艣cie' => ['SW'], 'bia艂ogardzki' => ['BI'], 'choszcze艅ski' => ['CH'], 'drawski' => ['DR'], 'goleniowski' => ['GL'], 'gryficki' => ['GY'], 'gryfi艅ski' => ['GR'], 'kamie艅ski' => ['KA'], 'ko艂obrzeski' => ['KL'], 'koszali艅ski' => ['KO'], '艂obeski' => ['LO'], 'my艣liborski' => ['MY'], 'policki' => ['PL'], 'pyrzycki' => ['PY'], 's艂awie艅ski' => ['SL'], 'stargardzki' => ['ST'], 'szczecinecki' => ['SZ'], '艣widwi艅ski' => ['SD'], 'wa艂ecki' => ['WA'], ], 'army' => [ 'Si艂y Zbrojne Rzeczypospolitej Polskiej' => ['A', 'B', 'C', 'D', 'E', 'G', 'I', 'J', 'K', 'L'], ], 'services' => [ 'Centralne Biuro Antykorupcyjne' => ['A'], 'S艂u偶ba Ochrony Pa艅stwa' => ['BA', 'BB', 'BE', 'BF', 'BG'], 'S艂u偶ba Celno-Skarbowa' => ['CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'CG', 'CH', 'CJ', 'CK', 'CL', 'CM', 'CN', 'CO', 'CP', 'CR'], 'Agencja Bezpiecze艅stwa Wewn臋trznego' => ['K'], 'Agencja Wywiadu' => ['K'], 'S艂u偶ba Kontrwywiadu Wojskowego' => ['M'], 'S艂u偶ba Wywiadu Wojskowego' => ['M'], 'Policja' => ['PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PG', 'PH', 'PJ', 'PK', 'PL', 'PL', 'PL', 'PL', 'PL', 'PM', 'PN', 'PP', 'PS', 'PT', 'PU', 'PW', 'PZ'], 'Stra偶 Graniczna' => ['WA', 'WK'], ], ]; /** * @var array list of regex expressions matching Polish license plate suffixess when county code is 1 character long. */ protected static $plateSuffixesGroup1 = [ '\d{5}', '\d{4}[A-PR-Z]', '\d{3}[A-PR-Z]{2}', '[1-9][A-PR-Z]\d{3}', '[1-9][A-PR-Z]{2}\d{2}', ]; /** * @var array list of regex expressions matching Polish license plate suffixess when county code is 2 characters long. */ protected static $plateSuffixesGroup2 = [ '[A-PR-Z]\d{3}', '\d{2}[A-PR-Z]{2}', '[1-9][A-PR-Z]\d{2}', '\d{2}[A-PR-Z][1-9]', '[1-9][A-PR-Z]{2}[1-9]', '[A-PR-Z]{2}\d{2}', '\d{5}', '\d{4}[A-PR-Z]', '\d{3}[A-PR-Z]{2}', '[A-PR-Z]\d{2}[A-PR-Z]', '[A-PR-Z][1-9][A-PR-Z]{2}', ]; /** * Generates random license plate. * * @param bool $special whether special license plates should be included * @param array|null $voivodeships list of voivodeships license plate should be generated from * @param array|null $counties list of counties license plate should be generated from */ public static function licensePlate( bool $special = false, ?array $voivodeships = null, ?array $counties = null ): string { $voivodeshipsAvailable = static::$voivodeships + ($special ? static::$specials : []); $voivodeshipSelected = static::selectRandomArea($voivodeshipsAvailable, $voivodeships); $voivodeshipCode = static::randomElement($voivodeshipsAvailable[$voivodeshipSelected]); $countiesAvailable = static::$counties[$voivodeshipSelected]; $countySelected = self::selectRandomArea($countiesAvailable, $counties); $countyCode = static::randomElement(static::$counties[$voivodeshipSelected][$countySelected]); $suffix = static::regexify(static::randomElement(strlen($countyCode) === 1 ? static::$plateSuffixesGroup1 : static::$plateSuffixesGroup2)); return "{$voivodeshipCode}{$countyCode} {$suffix}"; } /** * Selects random area from the list of available and requested. * * @return string */ protected static function selectRandomArea(array $available, ?array $requested) { $requested = array_intersect(array_keys($available), $requested ?? []); if (empty($requested)) { $requested = array_keys($available); } return static::randomElement($requested); } }