REFERENCE

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
Short answer

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:

  1. Move the first four characters (country code and check digits) to the end.
  2. Replace each letter with two digits: A = 10, B = 11, … Z = 35.
  3. 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. DE63111111111111111111 passes 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-resource download, 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’s iban.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’s registry.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.iban check. 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#

  1. python-stdnum, stdnum/iban.dat, accessed 2026-10-10.
  2. php-iban, registry.txt, accessed 2026-10-10.
  3. SWIFT, IBAN Registry, accessed 2026-10-10 (HTTP 403; not read).
  4. ISO, ISO 13616-1:2020, accessed 2026-10-10 (page not retrievable; registration-authority role from search-result summary).
  5. ISO/IEC 7064:2003 preview, accessed 2026-10-10.
Try it on your own input

IBAN checker

Hear when StormDoor opens

StormDoor is not open for signups yet. Join the waitlist and we will email you when it is.

WHAT WOULD YOU USE IT FOR?