IBAN formats and lengths for every country
IBAN length and format for all 89 countries, with a valid example for each and a worked mod-97 checksum.
Updated 2026-10-105 sources
On this page
As of 10 October 2026, the data derived from IBAN Registry release 101 covers 89 countries, and IBAN length ranges from 15 characters (Norway) to 33 (Russia) [1]. Every IBAN is a 2-letter country code, 2 check digits and a country-specific BBAN, and every real IBAN satisfies the ISO 7064 MOD 97-10 check, which turns the first four characters and the rest into one number whose remainder modulo 97 must be 1 [5].
Source caveat. SWIFT, the registration authority for the registry, returned HTTP 403 for every swift.com URL we tried from our network on 10 October 2026, so we could not download the registry file ourselves. The table below comes from python-stdnum’s iban.dat, which states it was generated from iban-registry-v101.txt [1]. See Method.
Key facts#
- The IBAN Registry is maintained by SWIFT as registration authority for ISO 13616 [4]; a country is added only on request from its national standards body or central bank (SWIFT, via search snippet; the page itself was not retrievable). #
- As of 10 October 2026, the IBAN registry data we used (release 101, via python-stdnum) lists 89 country codes [1]. #
- In IBAN registry release 101, the shortest IBAN is Norway’s at 15 characters and the longest is Russia’s at 33 [1]. #
- In IBAN registry release 101, the most common lengths are 28 characters (12 countries), 24 (11) and 22 (10). #
- An IBAN’s length is fixed per country, so a string with the wrong length for its prefix is not an IBAN even if its checksum passes. #
- In StormDoor’s 10 October 2026 test of 85 registry example IBANs, the mod-97 check caught all 15,777 single-digit substitutions and all 1,140 adjacent digit transpositions we tried. #
- A valid checksum shows the string is internally consistent. It does not show that the account exists, is open, or belongs to anyone. #
What is the structure of an IBAN?#
An IBAN (International Bank Account Number) is a string of at most 34 characters in ISO 13616 [4]. The first two letters are the ISO 3166 country code, the next two digits are check digits, and the rest is the BBAN (Basic Bank Account Number), whose layout each country defines.
The registry writes the BBAN layout in SWIFT notation: 4!a6!n8!n means 4 letters, then 6 digits, then 8 digits, all fixed length. n is digits, a is upper-case letters, c is letters or digits. The IBAN length is 4 plus the sum of the BBAN counts, so the United Kingdom’s 4!a6!n8!n gives 4 + 18 = 22.
How does the mod-97 check work?#
ISO/IEC 7064 defines the MOD 97-10 system, which IBAN uses for its check digits [5]. To validate:
- Move the first four characters (country code and check digits) to the end.
- Replace each letter with two digits: A = 10, B = 11, … Z = 35.
- Read the result as one integer and divide by 97. The remainder must be 1.
A remainder of 1 means the check passes. To generate check digits, put 00 in their place, compute the remainder r, and write 98 - r. The number is too large for a 64-bit integer for most countries, so implementations either use big integers or reduce piecewise.
What does a valid checksum prove, and what doesn’t it?#
It proves the string was probably not mistyped. We measured this on the registry examples: of 15,777 single-digit substitutions, none still passed; of 1,140 adjacent digit transpositions, none still passed (method in the Method section). The standard states that these systems detect all single substitution errors and transposition and shift errors [5].
It does not prove more than that:
- Existence. Anyone can compute valid check digits for an invented BBAN.
DE63111111111111111111passes mod-97 and has the right German length of 22; we constructed it, and no account is implied. - Ownership or status. The checksum says nothing about whether the account is open or who holds it.
- Bank identity. Some countries validate the bank code inside the BBAN with a national scheme; mod-97 on the whole IBAN does not.
- Random matches. A random string with a correct prefix and length passes roughly 1 time in 97. Length plus checksum together are why a scanner can find IBANs in free text with few false positives.
StormDoor’s pii.iban finding uses exactly these two tests, the per-country length and mod-97, on candidates in free text, and also accepts the grouped form in blocks of four (finding page, PII gate). You can test one value in the IBAN checker. StormDoor makes that tool.
Are there countries with partial or non-registry IBANs?#
We could not verify this from the registry, because we could not read it. Two observations from the data we do have: python-stdnum notes in a commit message that it kept Pakistan (PK) in iban.dat because the registry’s PDF still lists it although the text file does not [1], which shows the registry’s formats can differ between its PDF and text editions. And php-iban’s community table lists 121 countries and territories, which includes 36 codes absent from the release 101 data (for example Algeria, Morocco, Iran, and French overseas territories such as Réunion); php-iban marks many of them as not official registry entries [2]. We exclude those from the table. If a country is missing here, check it against the registry before relying on this page.
IBAN formats and lengths by country#
Source: release 101 data via python-stdnum [1]; examples from php-iban [2], each re-checked by our script for country prefix, length, BBAN structure and mod-97. Falkland Islands, Libya, Mongolia and Somalia have no example because our example source did not carry them. Data as of 10 October 2026.
| Code | Country | Length | BBAN structure | Example IBAN |
|---|---|---|---|---|
| AD | Andorra | 24 | 4!n4!n12!c |
AD1200012030200359100100 |
| AE | United Arab Emirates (The) | 23 | 3!n16!n |
AE070331234567890123456 |
| AL | Albania | 28 | 8!n16!c |
AL47212110090000000235698741 |
| AT | Austria | 20 | 5!n11!n |
AT611904300234573201 |
| AZ | Azerbaijan | 28 | 4!a20!c |
AZ21NABZ00000000137010001944 |
| BA | Bosnia and Herzegovina | 20 | 3!n3!n8!n2!n |
BA391290079401028494 |
| BE | Belgium | 16 | 3!n7!n2!n |
BE68539007547034 |
| BG | Bulgaria | 22 | 4!a4!n2!n8!c |
BG80BNBG96611020345678 |
| BH | Bahrain | 22 | 4!a14!c |
BH67BMAG00001299123456 |
| BI | Burundi | 27 | 5!n5!n11!n2!n |
BI4210000100010000332045181 |
| BR | Brazil | 29 | 8!n5!n10!n1!a1!c |
BR9700360305000010009795493P1 |
| BY | Belarus | 28 | 4!c4!n16!c |
BY13NBRB3600900000002Z00AB00 |
| CH | Switzerland | 21 | 5!n12!c |
CH9300762011623852957 |
| CR | Costa Rica | 22 | 4!n14!n |
CR05015202001026284066 |
| CY | Cyprus | 28 | 3!n5!n16!c |
CY17002001280000001200527600 |
| CZ | Czechia | 24 | 4!n16!n |
CZ6508000000192000145399 |
| DE | Germany | 22 | 8!n10!n |
DE89370400440532013000 |
| DJ | Djibouti | 27 | 5!n5!n11!n2!n |
DJ2100010000000154000100186 |
| DK | Denmark | 18 | 4!n9!n1!n |
DK5000400440116243 |
| DO | Dominican Republic | 28 | 4!c20!n |
DO28BAGR00000001212453611324 |
| EE | Estonia | 20 | 2!n14!n |
EE382200221020145685 |
| EG | Egypt | 29 | 4!n4!n17!n |
EG380019000500000000263180002 |
| ES | Spain | 24 | 4!n4!n1!n1!n10!n |
ES9121000418450200051332 |
| FI | Finland | 18 | 3!n11!n |
FI2112345600000785 |
| FK | Falkland Islands (Malvinas) | 18 | 2!a12!n |
not available |
| FO | Faroe Islands | 18 | 4!n9!n1!n |
FO2000400440116243 |
| FR | France | 27 | 5!n5!n11!c2!n |
FR1420041010050500013M02606 |
| GB | United Kingdom | 22 | 4!a6!n8!n |
GB29NWBK60161331926819 |
| GE | Georgia | 22 | 2!a16!n |
GE29NB0000000101904917 |
| GI | Gibraltar | 23 | 4!a15!c |
GI75NWBK000000007099453 |
| GL | Greenland | 18 | 4!n9!n1!n |
GL2000400440116243 |
| GR | Greece | 27 | 3!n4!n16!c |
GR1601101250000000012300695 |
| GT | Guatemala | 28 | 4!c20!c |
GT82TRAJ01020000001210029690 |
| HN | Honduras | 28 | 4!a20!n |
HN88CABF00000000000250005469 |
| HR | Croatia | 21 | 7!n10!n |
HR1210010051863000160 |
| HU | Hungary | 28 | 3!n4!n1!n15!n1!n |
HU42117730161111101800000000 |
| IE | Ireland | 22 | 4!a6!n8!n |
IE29AIBK93115212345678 |
| IL | Israel | 23 | 3!n3!n13!n |
IL620108000000099999999 |
| IQ | Iraq | 23 | 4!a3!n12!n |
IQ98NBIQ850123456789012 |
| IS | Iceland | 26 | 4!n2!n6!n10!n |
IS140159260076545510730339 |
| IT | Italy | 27 | 1!a5!n5!n12!c |
IT60X0542811101000000123456 |
| JO | Jordan | 30 | 4!a4!n18!c |
JO94CBJO0010000000000131000302 |
| KW | Kuwait | 30 | 4!a22!c |
KW81CBKU0000000000001234560101 |
| KZ | Kazakhstan | 20 | 3!n13!c |
KZ86125KZT5004100100 |
| LB | Lebanon | 28 | 4!n20!c |
LB62099900000001001901229114 |
| LC | Saint Lucia | 32 | 4!a24!c |
LC55HEMM000100010012001200023015 |
| LI | Liechtenstein | 21 | 5!n12!c |
LI21088100002324013AA |
| LT | Lithuania | 20 | 5!n11!n |
LT121000011101001000 |
| LU | Luxembourg | 20 | 3!n13!c |
LU280019400644750000 |
| LV | Latvia | 21 | 4!a13!c |
LV80BANK0000435195001 |
| LY | Libya | 25 | 3!n3!n15!n |
not available |
| MC | Monaco | 27 | 5!n5!n11!c2!n |
MC5811222000010123456789030 |
| MD | Moldova, Republic of | 24 | 2!c18!c |
MD24AG000225100013104168 |
| ME | Montenegro | 22 | 3!n13!n2!n |
ME25505000012345678951 |
| MK | North Macedonia | 19 | 3!n10!c2!n |
MK07250120000058984 |
| MN | Mongolia | 20 | 4!n12!n |
not available |
| MR | Mauritania | 27 | 5!n5!n11!n2!n |
MR1300020001010000123456753 |
| MT | Malta | 31 | 4!a5!n18!c |
MT84MALT011000012345MTLCAST001S |
| MU | Mauritius | 30 | 4!a2!n2!n12!n3!n3!a |
MU17BOMM0101101030300200000MUR |
| NI | Nicaragua | 28 | 4!a20!n |
NI45BAPR00000013000003558124 |
| NL | Netherlands (The) | 18 | 4!a10!n |
NL91ABNA0417164300 |
| NO | Norway | 15 | 4!n6!n1!n |
NO9386011117947 |
| OM | Oman | 23 | 3!n16!c |
OM810180000001299123456 |
| PK | Pakistan | 24 | 4!a16!c |
PK36SCBL0000001123456702 |
| PL | Poland | 28 | 8!n16!n |
PL61109010140000071219812874 |
| PS | Palestine, State of | 29 | 4!a21!c |
PS92PALS000000000400123456702 |
| PT | Portugal | 25 | 4!n4!n11!n2!n |
PT50000201231234567890154 |
| QA | Qatar | 29 | 4!a21!c |
QA58DOHB00001234567890ABCDEFG |
| RO | Romania | 24 | 4!a16!c |
RO49AAAA1B31007593840000 |
| RS | Serbia | 22 | 3!n13!n2!n |
RS35260005601001611379 |
| RU | Russian Federation | 33 | 9!n5!n15!c |
RU0304452522540817810538091310419 |
| SA | Saudi Arabia | 24 | 2!n18!c |
SA0380000000608010167519 |
| SC | Seychelles | 31 | 4!a2!n2!n16!n3!a |
SC18SSCB11010000000000001497USD |
| SD | Sudan | 18 | 2!n12!n |
SD2129010501234001 |
| SE | Sweden | 24 | 3!n16!n1!n |
SE4550000000058398257466 |
| SI | Slovenia | 19 | 5!n8!n2!n |
SI56191000000123438 |
| SK | Slovakia | 24 | 4!n6!n10!n |
SK3112000000198742637541 |
| SM | San Marino | 27 | 1!a5!n5!n12!c |
SM86U0322509800000000270100 |
| SO | Somalia | 23 | 4!n3!n12!n |
not available |
| ST | Sao Tome and Principe | 25 | 4!n4!n11!n2!n |
ST68000100010051845310112 |
| SV | El Salvador | 28 | 4!a20!n |
SV62CENR00000000000000700025 |
| TL | Timor-Leste | 23 | 3!n14!n2!n |
TL380080012345678910157 |
| TN | Tunisia | 24 | 2!n3!n13!n2!n |
TN5910006035183598478831 |
| TR | Turkiye | 26 | 5!n1!n16!c |
TR330006100519786457841326 |
| UA | Ukraine | 29 | 6!n19!c |
UA213996220000026007233566001 |
| VA | Holy See | 22 | 3!n15!n |
VA59001123000012345678 |
| VG | Virgin Islands (British) | 24 | 4!a16!n |
VG96VPVG0000012345678901 |
| XK | Kosovo | 20 | 4!n10!n2!n |
XK051212012345678906 |
| YE | Yemen | 30 | 4!a4!n18!c |
YE15CBYE0001018861234567891234 |
Method#
- Registry source. We intended to parse the SWIFT IBAN Registry text file. Every request to swift.com (page,
swift-resourcedownload, www2 host) returned HTTP 403 from our server and from two other fetch tools on 10 October 2026, and the Internet Archive was offline. We therefore did not read the registry directly and cannot state its release date. The release number, 101, is taken from the header of python-stdnum’siban.dat; that file was last committed on 4 January 2026 [1]. - What we counted. Country name, BBAN structure and length come from
iban.dat. Length is 4 plus the sum of the BBAN field widths. Examples come from php-iban’sregistry.txt[2] (last updated 12 September 2026, the file we used); an example is printed only if its prefix matches, its length matches, its BBAN fits the structure and its remainder mod 97 is 1. - Not included. SEPA membership. The registry states it, but we could not read it and did not want to substitute another source’s list.
- Cross-check against StormDoor. We compared the table with the per-country length map used by StormDoor’s
pii.ibancheck. Result: both contain the same 89 country codes, and all 89 lengths agree. No differences. This is a check against a derived copy of release 101, not against a later release. - Limits. If SWIFT has published a release after 101, additions or changes are not reflected. php-iban’s other fields (SEPA flag, “official” flag) disagreed with release 101 for at least two countries (Egypt, Ukraine), so we did not use them.
- Checksum test. On 10 October 2026, for each of the 85 example IBANs in the table, we replaced each digit after the country code (check digits and BBAN) with every other digit (15,777 single-digit substitutions) and swapped each pair of adjacent different digits (1,140 transpositions), then re-ran mod-97 and counted how many still gave remainder 1 (none did). Limit: examples only, not real accounts.
Sources#
- python-stdnum,
stdnum/iban.dat, accessed 2026-10-10. - php-iban,
registry.txt, accessed 2026-10-10. - SWIFT, IBAN Registry, accessed 2026-10-10 (HTTP 403; not read).
- ISO, ISO 13616-1:2020, accessed 2026-10-10 (page not retrievable; registration-authority role from search-result summary).
- ISO/IEC 7064:2003 preview, accessed 2026-10-10.
IBAN checker
Hear when StormDoor opens
StormDoor is not open for signups yet. Join the waitlist and we will email you when it is.
Check your inbox
We sent a confirmation link to the address you entered. Click it to join the list. It can take a minute, and it may land in spam.