import re iban_matcher = '^(?:' iban_matcher += 'AL\d{10}[A-Z0-9]{16}' # Albania iban_matcher += '|AD\d{10}[A-Z0-9]{12}' # Andorra iban_matcher += '|AT\d{18}' # Austria iban_matcher += '|AZ\d{2}[A-Z]{4}[A-Z0-9]{20}' # Azerbaijan iban_matcher += '|BH\d{2}[A-Z]{4}[A-Z0-9]{14}' # Bahrain iban_matcher += '|BY\d{2}[A-Z0-9]{4}\d{4}[A-Z0-9]{16}' # Belarus iban_matcher += '|BE\d{14}' # Belgium iban_matcher += '|BA\d{18}' # Bosnia and Herzegovina iban_matcher += '|BR\d{25}[A-Z]{1}[A-Z0-9]{1}' # Brazil iban_matcher += '|BG\d{2}[A-Z]{4}\d{6}[A-Z0-9]{8}' # Bulgaria iban_matcher += '|CR\d{20}' # Costa Rica iban_matcher += '|HR\d{19}' # Croatia iban_matcher += '|CY\d{10}[A-Z0-9]{16}' # Cyprus iban_matcher += '|CZ\d{22}' # Czechia iban_matcher += '|DK\d{16}' # Denmark iban_matcher += '|DO\d{2}[A-Z0-9]{4}\d{20}' # Dominican Republic iban_matcher += '|EG\d{27}' # Egypt iban_matcher += '|SV\d{2}[A-Z]{4}\d{20}' # El Salvador iban_matcher += '|EE\d{18}' # Estonia iban_matcher += '|FO\d{16}' # Faroe Islands iban_matcher += '|FI\d{16}' # Finland iban_matcher += '|FR\d{12}[A-Z0-9]{11}\d{2}' # France iban_matcher += '|GE\d{2}[A-Z]{2}\d{16}' # Georgia iban_matcher += '|DE\d{20}' # Germany iban_matcher += '|GI\d{2}[A-Z]{4}[A-Z0-9]{15}' # Gibraltar iban_matcher += '|GR\d{9}[A-Z0-9]{16}' # Greece iban_matcher += '|GL\d{16}' # Greenland iban_matcher += '|GT\d{2}[A-Z0-9]{24}' # Guatemala iban_matcher += '|HU\d{26}' # Hungary iban_matcher += '|IS\d{24}' # Iceland iban_matcher += '|IQ\d{2}[A-Z]{4}\d{15}' # Iraq iban_matcher += '|IE\d{2}[A-Z]{4}\d{14}' # Ireland iban_matcher += '|IL\d{21}' # Israel iban_matcher += '|IT\d{2}[A-Z]{1}\d{10}[A-Z0-9]{12}' # Italy iban_matcher += '|JO\d{2}[A-Z]{4}\d{4}[A-Z0-9]{18}' # Jordan iban_matcher += '|KZ\d{5}[A-Z0-9]{13}' # Kazakhstan iban_matcher += '|XK\d{18}' # Kosovo iban_matcher += '|KW\d{2}[A-Z]{4}[A-Z0-9]{22}' # Kuwait iban_matcher += '|LV\d{2}[A-Z]{4}[A-Z0-9]{13}' # Latvia iban_matcher += '|LB\d{6}[A-Z0-9]{20}' # Lebanon iban_matcher += '|LY\d{23}' # Libya iban_matcher += '|LI\d{7}[A-Z0-9]{12}' # Liechtenstein iban_matcher += '|LT\d{18}' # Lithuania iban_matcher += '|LU\d{5}[A-Z0-9]{13}' # Luxembourg iban_matcher += '|MT\d{2}[A-Z]{4}\d{5}[A-Z0-9]{18}' # Malta iban_matcher += '|MR\d{25}' # Mauritania iban_matcher += '|MU\d{2}[A-Z]{4}\d{19}[A-Z]{3}' # Mauritius iban_matcher += '|MD\d{2}[A-Z0-9]{20}' # Moldova iban_matcher += '|MC\d{12}[A-Z0-9]{11}\d{2}' # Monaco iban_matcher += '|ME\d{20}' # Montenegro iban_matcher += '|NL\d{2}[A-Z]{4}\d{10}' # Netherlands iban_matcher += '|MK\d{5}[A-Z0-9]{10}\d{2}' # North Macedonia iban_matcher += '|NO\d{13}' # Norway iban_matcher += '|PK\d{2}[A-Z]{4}[A-Z0-9]{16}' # Pakistan iban_matcher += '|PS\d{2}[A-Z]{4}[A-Z0-9]{21}' # Palestine iban_matcher += '|PL\d{26}' # Poland iban_matcher += '|PT\d{23}' # Portugal iban_matcher += '|QA\d{2}[A-Z]{4}[A-Z0-9]{21}' # Qatar iban_matcher += '|RO\d{2}[A-Z]{4}[A-Z0-9]{16}' # Romania iban_matcher += '|LC\d{2}[A-Z]{4}[A-Z0-9]{24}' # Saint Lucia iban_matcher += '|SM\d{2}[A-Z]{1}\d{10}[A-Z0-9]{12}' # San Marino iban_matcher += '|ST\d{23}' # Sao Tome and Principe iban_matcher += '|SA\d{4}[A-Z0-9]{18}' # Saudi Arabia iban_matcher += '|RS\d{20}' # Serbia iban_matcher += '|SC\d{2}[A-Z]{4}\d{20}[A-Z]{3}' # Seychelles iban_matcher += '|SK\d{22}' # Slovakia iban_matcher += '|SI\d{17}' # Slovenia iban_matcher += '|ES\d{22}' # Spain iban_matcher += '|SD\d{16}' # Sudan iban_matcher += '|SE\d{22}' # Sweden iban_matcher += '|CH\d{7}[A-Z0-9]{12}' # Switzerland iban_matcher += '|TL\d{21}' # Timor Leste iban_matcher += '|TN\d{22}' # Tunisia iban_matcher += '|TR\d{8}[A-Z0-9]{16}' # Turkey iban_matcher += '|UA\d{8}[A-Z0-9]{19}' # Ukraine iban_matcher += '|AE\d{21}' # United Arab Emirates iban_matcher += '|GB\d{2}[A-Z]{4}\d{14}' # United Kingdom iban_matcher += '|VA\d{20}' # Vatican City iban_matcher += '|VG\d{2}[A-Z]{4}\d{16}' # Virgin Islands iban_matcher += ')$' def is_valid_iban(iban): return re.search(iban_matcher, iban) is not None