Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e76c358

Browse files
committed
[Validator] Add script to sync IBAN formats
1 parent e865629 commit e76c358

File tree

4 files changed

+330
-116
lines changed

4 files changed

+330
-116
lines changed

src/Symfony/Component/Validator/.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
/phpunit.xml.dist export-ignore
33
/.gitattributes export-ignore
44
/.gitignore export-ignore
5+
/Resources/bin/sync-iban-formats.php export-ignore

src/Symfony/Component/Validator/Constraints/IbanValidator.php

Lines changed: 128 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -34,120 +34,137 @@ class IbanValidator extends ConstraintValidator
3434
* a BBAN (Basic Bank Account Number) which has a fixed length per country and,
3535
* included within it, a bank identifier with a fixed position and a fixed length per country
3636
*
37+
* Auto-generated by script
38+
*
39+
* @see Resources/bin/sync-iban-formats.php
3740
* @see https://www.swift.com/sites/default/files/resources/iban_registry.pdf
41+
* @see https://en.wikipedia.org/wiki/International_Bank_Account_Number
3842
*/
3943
private const FORMATS = [
40-
'AD' => 'AD\d{2}\d{4}\d{4}[\dA-Z]{12}', // Andorra
41-
'AE' => 'AE\d{2}\d{3}\d{16}', // United Arab Emirates
42-
'AL' => 'AL\d{2}\d{8}[\dA-Z]{16}', // Albania
43-
'AO' => 'AO\d{2}\d{21}', // Angola
44-
'AT' => 'AT\d{2}\d{5}\d{11}', // Austria
45-
'AX' => 'FI\d{2}\d{3}\d{11}', // Aland Islands
46-
'AZ' => 'AZ\d{2}[A-Z]{4}[\dA-Z]{20}', // Azerbaijan
47-
'BA' => 'BA\d{2}\d{3}\d{3}\d{8}\d{2}', // Bosnia and Herzegovina
48-
'BE' => 'BE\d{2}\d{3}\d{7}\d{2}', // Belgium
49-
'BF' => 'BF\d{2}\d{23}', // Burkina Faso
50-
'BG' => 'BG\d{2}[A-Z]{4}\d{4}\d{2}[\dA-Z]{8}', // Bulgaria
51-
'BH' => 'BH\d{2}[A-Z]{4}[\dA-Z]{14}', // Bahrain
52-
'BI' => 'BI\d{2}\d{5}\d{5}\d{11}\d{2}', // Burundi
53-
'BJ' => 'BJ\d{2}[A-Z]{1}\d{23}', // Benin
54-
'BL' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Saint Barthelemy
55-
'BR' => 'BR\d{2}\d{8}\d{5}\d{10}[A-Z]{1}[\dA-Z]{1}', // Brazil
56-
'BY' => 'BY\d{2}[\dA-Z]{4}\d{4}[\dA-Z]{16}', // Belarus - https://bank.codes/iban/structure/belarus/
57-
'CG' => 'CG\d{2}\d{23}', // Congo
58-
'CH' => 'CH\d{2}\d{5}[\dA-Z]{12}', // Switzerland
59-
'CI' => 'CI\d{2}[A-Z]{1}\d{23}', // Ivory Coast
60-
'CM' => 'CM\d{2}\d{23}', // Cameron
61-
'CR' => 'CR\d{2}\d{4}\d{14}', // Costa Rica
62-
'CV' => 'CV\d{2}\d{21}', // Cape Verde
63-
'CY' => 'CY\d{2}\d{3}\d{5}[\dA-Z]{16}', // Cyprus
64-
'CZ' => 'CZ\d{2}\d{4}\d{6}\d{10}', // Czech Republic
65-
'DE' => 'DE\d{2}\d{8}\d{10}', // Germany
66-
'DJ' => 'DJ\d{2}\d{5}\d{5}\d{11}\d{2}', // Djibouti
67-
'DK' => 'DK\d{2}\d{4}\d{9}\d{1}', // Denmark
68-
'DO' => 'DO\d{2}[\dA-Z]{4}\d{20}', // Dominican Republic
69-
'DZ' => 'DZ\d{2}\d{20}', // Algeria
70-
'EE' => 'EE\d{2}\d{2}\d{2}\d{11}\d{1}', // Estonia
71-
'EG' => 'EG\d{2}\d{4}\d{4}\d{17}', // Egypt
72-
'ES' => 'ES\d{2}\d{4}\d{4}\d{1}\d{1}\d{10}', // Spain (also includes Canary Islands, Ceuta and Melilla)
73-
'FI' => 'FI\d{2}\d{3}\d{11}', // Finland
74-
'FO' => 'FO\d{2}\d{4}\d{9}\d{1}', // Faroe Islands
75-
'FR' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // France
76-
'GB' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // United Kingdom of Great Britain and Northern Ireland
77-
'GE' => 'GE\d{2}[A-Z]{2}\d{16}', // Georgia
78-
'GF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // French Guyana
79-
'GG' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // Guernsey
80-
'GI' => 'GI\d{2}[A-Z]{4}[\dA-Z]{15}', // Gibraltar
81-
'GL' => 'GL\d{2}\d{4}\d{9}\d{1}', // Greenland
82-
'GP' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Guadeloupe
83-
'GR' => 'GR\d{2}\d{3}\d{4}[\dA-Z]{16}', // Greece
84-
'GT' => 'GT\d{2}[\dA-Z]{4}[\dA-Z]{20}', // Guatemala
85-
'HR' => 'HR\d{2}\d{7}\d{10}', // Croatia
86-
'HU' => 'HU\d{2}\d{3}\d{4}\d{1}\d{15}\d{1}', // Hungary
87-
'IE' => 'IE\d{2}[A-Z]{4}\d{6}\d{8}', // Ireland
88-
'IL' => 'IL\d{2}\d{3}\d{3}\d{13}', // Israel
89-
'IM' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // Isle of Man
90-
'IQ' => 'IQ\d{2}[A-Z]{4}\d{3}\d{12}', // Iraq
91-
'IR' => 'IR\d{2}\d{22}', // Iran
92-
'IS' => 'IS\d{2}\d{4}\d{2}\d{6}\d{10}', // Iceland
93-
'IT' => 'IT\d{2}[A-Z]{1}\d{5}\d{5}[\dA-Z]{12}', // Italy
94-
'JE' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}', // Jersey
95-
'JO' => 'JO\d{2}[A-Z]{4}\d{4}[\dA-Z]{18}', // Jordan
96-
'KW' => 'KW\d{2}[A-Z]{4}[\dA-Z]{22}', // KUWAIT
97-
'KZ' => 'KZ\d{2}\d{3}[\dA-Z]{13}', // Kazakhstan
98-
'LB' => 'LB\d{2}\d{4}[\dA-Z]{20}', // LEBANON
99-
'LC' => 'LC\d{2}[A-Z]{4}[\dA-Z]{24}', // Saint Lucia
100-
'LI' => 'LI\d{2}\d{5}[\dA-Z]{12}', // Liechtenstein (Principality of)
101-
'LT' => 'LT\d{2}\d{5}\d{11}', // Lithuania
102-
'LU' => 'LU\d{2}\d{3}[\dA-Z]{13}', // Luxembourg
103-
'LV' => 'LV\d{2}[A-Z]{4}[\dA-Z]{13}', // Latvia
104-
'LY' => 'LY\d{2}\d{3}\d{3}\d{15}', // Libya
105-
'MC' => 'MC\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Monaco
106-
'MD' => 'MD\d{2}[\dA-Z]{2}[\dA-Z]{18}', // Moldova
107-
'ME' => 'ME\d{2}\d{3}\d{13}\d{2}', // Montenegro
108-
'MF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Saint Martin (French part)
109-
'MG' => 'MG\d{2}\d{23}', // Madagascar
110-
'MK' => 'MK\d{2}\d{3}[\dA-Z]{10}\d{2}', // Macedonia, Former Yugoslav Republic of
111-
'ML' => 'ML\d{2}[A-Z]{1}\d{23}', // Mali
112-
'MQ' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Martinique
113-
'MR' => 'MR\d{2}\d{5}\d{5}\d{11}\d{2}', // Mauritania
114-
'MT' => 'MT\d{2}[A-Z]{4}\d{5}[\dA-Z]{18}', // Malta
115-
'MU' => 'MU\d{2}[A-Z]{4}\d{2}\d{2}\d{12}\d{3}[A-Z]{3}', // Mauritius
116-
'MZ' => 'MZ\d{2}\d{21}', // Mozambique
117-
'NC' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // New Caledonia
118-
'NL' => 'NL\d{2}[A-Z]{4}\d{10}', // The Netherlands
119-
'NO' => 'NO\d{2}\d{4}\d{6}\d{1}', // Norway
120-
'PF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // French Polynesia
121-
'PK' => 'PK\d{2}[A-Z]{4}[\dA-Z]{16}', // Pakistan
122-
'PL' => 'PL\d{2}\d{8}\d{16}', // Poland
123-
'PM' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Saint Pierre et Miquelon
124-
'PS' => 'PS\d{2}[A-Z]{4}[\dA-Z]{21}', // Palestine, State of
125-
'PT' => 'PT\d{2}\d{4}\d{4}\d{11}\d{2}', // Portugal (plus Azores and Madeira)
126-
'QA' => 'QA\d{2}[A-Z]{4}[\dA-Z]{21}', // Qatar
127-
'RE' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Reunion
128-
'RO' => 'RO\d{2}[A-Z]{4}[\dA-Z]{16}', // Romania
129-
'RS' => 'RS\d{2}\d{3}\d{13}\d{2}', // Serbia
130-
'RU' => 'RU\d{2}\d{9}\d{5}[\dA-Z]{15}', // Russia
131-
'SA' => 'SA\d{2}\d{2}[\dA-Z]{18}', // Saudi Arabia
132-
'SC' => 'SC\d{2}[A-Z]{4}\d{2}\d{2}\d{16}[A-Z]{3}', // Seychelles
133-
'SD' => 'SD\d{2}\d{2}\d{12}', // Sudan
134-
'SE' => 'SE\d{2}\d{3}\d{16}\d{1}', // Sweden
135-
'SI' => 'SI\d{2}\d{5}\d{8}\d{2}', // Slovenia
136-
'SK' => 'SK\d{2}\d{4}\d{6}\d{10}', // Slovak Republic
137-
'SM' => 'SM\d{2}[A-Z]{1}\d{5}\d{5}[\dA-Z]{12}', // San Marino
138-
'SN' => 'SN\d{2}[A-Z]{1}\d{23}', // Senegal
139-
'ST' => 'ST\d{2}\d{4}\d{4}\d{11}\d{2}', // Sao Tome and Principe
140-
'SV' => 'SV\d{2}[A-Z]{4}\d{20}', // El Salvador
141-
'TF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // French Southern Territories
142-
'TL' => 'TL\d{2}\d{3}\d{14}\d{2}', // Timor-Leste
143-
'TN' => 'TN\d{2}\d{2}\d{3}\d{13}\d{2}', // Tunisia
144-
'TR' => 'TR\d{2}\d{5}\d{1}[\dA-Z]{16}', // Turkey
145-
'UA' => 'UA\d{2}\d{6}[\dA-Z]{19}', // Ukraine
146-
'VA' => 'VA\d{2}\d{3}\d{15}', // Vatican City State
147-
'VG' => 'VG\d{2}[A-Z]{4}\d{16}', // Virgin Islands, British
148-
'WF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Wallis and Futuna Islands
149-
'XK' => 'XK\d{2}\d{4}\d{10}\d{2}', // Republic of Kosovo
150-
'YT' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}', // Mayotte
44+
// auto-generated
45+
'AD' => 'AD\d{2}\d{4}\d{4}[\dA-Z]{12}',
46+
'AE' => 'AE\d{2}\d{3}\d{16}',
47+
'AL' => 'AL\d{2}\d{8}[\dA-Z]{16}',
48+
'AO' => 'AO\d{2}\d{21}',
49+
'AT' => 'AT\d{2}\d{5}\d{11}',
50+
'AX' => 'FI\d{2}\d{3}\d{11}',
51+
'AZ' => 'AZ\d{2}[A-Z]{4}[\dA-Z]{20}',
52+
'BA' => 'BA\d{2}\d{3}\d{3}\d{8}\d{2}',
53+
'BE' => 'BE\d{2}\d{3}\d{7}\d{2}',
54+
'BF' => 'BF\d{2}[\dA-Z]{2}\d{22}',
55+
'BG' => 'BG\d{2}[A-Z]{4}\d{4}\d{2}[\dA-Z]{8}',
56+
'BH' => 'BH\d{2}[A-Z]{4}[\dA-Z]{14}',
57+
'BI' => 'BI\d{2}\d{5}\d{5}\d{11}\d{2}',
58+
'BJ' => 'BJ\d{2}[\dA-Z]{2}\d{22}',
59+
'BL' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
60+
'BR' => 'BR\d{2}\d{8}\d{5}\d{10}[A-Z]{1}[\dA-Z]{1}',
61+
'BY' => 'BY\d{2}[\dA-Z]{4}\d{4}[\dA-Z]{16}',
62+
'CF' => 'CF\d{2}\d{23}',
63+
'CG' => 'CG\d{2}\d{23}',
64+
'CH' => 'CH\d{2}\d{5}[\dA-Z]{12}',
65+
'CI' => 'CI\d{2}[A-Z]{1}\d{23}',
66+
'CM' => 'CM\d{2}\d{23}',
67+
'CR' => 'CR\d{2}\d{4}\d{14}',
68+
'CV' => 'CV\d{2}\d{21}',
69+
'CY' => 'CY\d{2}\d{3}\d{5}[\dA-Z]{16}',
70+
'CZ' => 'CZ\d{2}\d{4}\d{6}\d{10}',
71+
'DE' => 'DE\d{2}\d{8}\d{10}',
72+
'DJ' => 'DJ\d{2}\d{5}\d{5}\d{11}\d{2}',
73+
'DK' => 'DK\d{2}\d{4}\d{9}\d{1}',
74+
'DO' => 'DO\d{2}[\dA-Z]{4}\d{20}',
75+
'DZ' => 'DZ\d{2}\d{22}',
76+
'EE' => 'EE\d{2}\d{2}\d{2}\d{11}\d{1}',
77+
'EG' => 'EG\d{2}\d{4}\d{4}\d{17}',
78+
'ES' => 'ES\d{2}\d{4}\d{4}\d{1}\d{1}\d{10}',
79+
'FI' => 'FI\d{2}\d{3}\d{11}',
80+
'FO' => 'FO\d{2}\d{4}\d{9}\d{1}',
81+
'FR' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
82+
'GA' => 'GA\d{2}\d{23}',
83+
'GB' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}',
84+
'GE' => 'GE\d{2}[A-Z]{2}\d{16}',
85+
'GF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
86+
'GG' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}',
87+
'GI' => 'GI\d{2}[A-Z]{4}[\dA-Z]{15}',
88+
'GL' => 'GL\d{2}\d{4}\d{9}\d{1}',
89+
'GP' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
90+
'GQ' => 'GQ\d{2}\d{23}',
91+
'GR' => 'GR\d{2}\d{3}\d{4}[\dA-Z]{16}',
92+
'GT' => 'GT\d{2}[\dA-Z]{4}[\dA-Z]{20}',
93+
'GW' => 'GW\d{2}[\dA-Z]{2}\d{19}',
94+
'HN' => 'HN\d{2}[A-Z]{4}\d{20}',
95+
'HR' => 'HR\d{2}\d{7}\d{10}',
96+
'HU' => 'HU\d{2}\d{3}\d{4}\d{1}\d{15}\d{1}',
97+
'IE' => 'IE\d{2}[A-Z]{4}\d{6}\d{8}',
98+
'IL' => 'IL\d{2}\d{3}\d{3}\d{13}',
99+
'IM' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}',
100+
'IQ' => 'IQ\d{2}[A-Z]{4}\d{3}\d{12}',
101+
'IR' => 'IR\d{2}\d{22}',
102+
'IS' => 'IS\d{2}\d{4}\d{2}\d{6}\d{10}',
103+
'IT' => 'IT\d{2}[A-Z]{1}\d{5}\d{5}[\dA-Z]{12}',
104+
'JE' => 'GB\d{2}[A-Z]{4}\d{6}\d{8}',
105+
'JO' => 'JO\d{2}[A-Z]{4}\d{4}[\dA-Z]{18}',
106+
'KM' => 'KM\d{2}\d{23}',
107+
'KW' => 'KW\d{2}[A-Z]{4}[\dA-Z]{22}',
108+
'KZ' => 'KZ\d{2}\d{3}[\dA-Z]{13}',
109+
'LB' => 'LB\d{2}\d{4}[\dA-Z]{20}',
110+
'LC' => 'LC\d{2}[A-Z]{4}[\dA-Z]{24}',
111+
'LI' => 'LI\d{2}\d{5}[\dA-Z]{12}',
112+
'LT' => 'LT\d{2}\d{5}\d{11}',
113+
'LU' => 'LU\d{2}\d{3}[\dA-Z]{13}',
114+
'LV' => 'LV\d{2}[A-Z]{4}[\dA-Z]{13}',
115+
'LY' => 'LY\d{2}\d{3}\d{3}\d{15}',
116+
'MA' => 'MA\d{2}\d{24}',
117+
'MC' => 'MC\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
118+
'MD' => 'MD\d{2}[\dA-Z]{2}[\dA-Z]{18}',
119+
'ME' => 'ME\d{2}\d{3}\d{13}\d{2}',
120+
'MF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
121+
'MG' => 'MG\d{2}\d{23}',
122+
'MK' => 'MK\d{2}\d{3}[\dA-Z]{10}\d{2}',
123+
'ML' => 'ML\d{2}[\dA-Z]{2}\d{22}',
124+
'MQ' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
125+
'MR' => 'MR\d{2}\d{5}\d{5}\d{11}\d{2}',
126+
'MT' => 'MT\d{2}[A-Z]{4}\d{5}[\dA-Z]{18}',
127+
'MU' => 'MU\d{2}[A-Z]{4}\d{2}\d{2}\d{12}\d{3}[A-Z]{3}',
128+
'MZ' => 'MZ\d{2}\d{21}',
129+
'NC' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
130+
'NE' => 'NE\d{2}[A-Z]{2}\d{22}',
131+
'NI' => 'NI\d{2}[A-Z]{4}\d{24}',
132+
'NL' => 'NL\d{2}[A-Z]{4}\d{10}',
133+
'NO' => 'NO\d{2}\d{4}\d{6}\d{1}',
134+
'PF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
135+
'PK' => 'PK\d{2}[A-Z]{4}[\dA-Z]{16}',
136+
'PL' => 'PL\d{2}\d{8}\d{16}',
137+
'PM' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
138+
'PS' => 'PS\d{2}[A-Z]{4}[\dA-Z]{21}',
139+
'PT' => 'PT\d{2}\d{4}\d{4}\d{11}\d{2}',
140+
'QA' => 'QA\d{2}[A-Z]{4}[\dA-Z]{21}',
141+
'RE' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
142+
'RO' => 'RO\d{2}[A-Z]{4}[\dA-Z]{16}',
143+
'RS' => 'RS\d{2}\d{3}\d{13}\d{2}',
144+
'RU' => 'RU\d{2}\d{9}\d{5}[\dA-Z]{15}',
145+
'SA' => 'SA\d{2}\d{2}[\dA-Z]{18}',
146+
'SC' => 'SC\d{2}[A-Z]{4}\d{2}\d{2}\d{16}[A-Z]{3}',
147+
'SD' => 'SD\d{2}\d{2}\d{12}',
148+
'SE' => 'SE\d{2}\d{3}\d{16}\d{1}',
149+
'SI' => 'SI\d{2}\d{5}\d{8}\d{2}',
150+
'SK' => 'SK\d{2}\d{4}\d{6}\d{10}',
151+
'SM' => 'SM\d{2}[A-Z]{1}\d{5}\d{5}[\dA-Z]{12}',
152+
'SN' => 'SN\d{2}[A-Z]{2}\d{22}',
153+
'SO' => 'SO\d{2}\d{4}\d{3}\d{12}',
154+
'ST' => 'ST\d{2}\d{4}\d{4}\d{11}\d{2}',
155+
'SV' => 'SV\d{2}[A-Z]{4}\d{20}',
156+
'TD' => 'TD\d{2}\d{23}',
157+
'TF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
158+
'TG' => 'TG\d{2}[A-Z]{2}\d{22}',
159+
'TL' => 'TL\d{2}\d{3}\d{14}\d{2}',
160+
'TN' => 'TN\d{2}\d{2}\d{3}\d{13}\d{2}',
161+
'TR' => 'TR\d{2}\d{5}\d{1}[\dA-Z]{16}',
162+
'UA' => 'UA\d{2}\d{6}[\dA-Z]{19}',
163+
'VA' => 'VA\d{2}\d{3}\d{15}',
164+
'VG' => 'VG\d{2}[A-Z]{4}\d{16}',
165+
'WF' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
166+
'XK' => 'XK\d{2}\d{4}\d{10}\d{2}',
167+
'YT' => 'FR\d{2}\d{5}\d{5}[\dA-Z]{11}\d{2}',
151168
];
152169

153170
/**

0 commit comments

Comments
 (0)