Checksum, country, length, and structure checks — batch-friendly, all in your browser
| Country | Code | Total Length | BBAN Structure (after the check digits) | SEPA |
|---|---|---|---|---|
| United Kingdom | GB | 22 | 4 letters (bank + branch) + 14 digits | Yes |
| Germany | DE | 22 | 18 digits (bank code + account) | Yes |
| France | FR | 27 | 10 digits + 11 letters/digits + 2-digit key | Yes |
| Netherlands | NL | 18 | 4-letter bank code + 10 digits | Yes |
| Belgium | BE | 16 | 12 digits | Yes |
| Spain | ES | 24 | 20 digits | Yes |
| Italy | IT | 27 | 1 check letter + 10 digits + 12 letters/digits | Yes |
| Switzerland | CH | 21 | 5 digits + 12 letters/digits | Yes |
| Austria | AT | 20 | 16 digits | Yes |
| Ireland | IE | 22 | 4 letters/digits + 14 digits | Yes |
| Portugal | PT | 25 | 21 digits | Yes |
| Sweden | SE | 24 | 20 digits | Yes |
| Norway | NO | 15 | 11 digits | Yes |
| Denmark | DK | 18 | 14 digits | Yes |
| Finland | FI | 18 | 14 digits | Yes |
| Poland | PL | 28 | 24 digits | Yes |
| Türkiye | TR | 26 | 5 digits + 17 letters/digits | No |
| Saudi Arabia | SA | 24 | 2 digits + 18 letters/digits | No |
| UAE | AE | 23 | 3 digits + 16 digits | No |
| Brazil | BR | 29 | 23 digits + 1 letter + 1 letter/digit | No |
| United States | US | Not in the IBAN system — routing number + account number instead | n/a | |
The IBAN registry covers 97 countries; 37 of them are in SEPA. Lengths range from 15 (Norway) to 29 (Brazil). This table is generated from the same country-rules database the validator engine uses, so the page and the tool can't drift apart.
| Code | Engine error | In plain English |
|---|---|---|
| 0 | NoIBANProvided | Empty line — nothing to check |
| 1 | NoIBANCountry | Country code isn't in the IBAN registry (US, CA, AU, JP, or a typo like XX) |
| 2 | WrongBBANLength | Total length doesn't match the country's rule |
| 3 | WrongBBANFormat | BBAN has letters where digits belong (or vice versa) for that country |
| 4 | ChecksumNotNumber | Characters 3–4 aren't digits — the check digits themselves are malformed |
| 5 | WrongIBANChecksum | Mod-97 doesn't equal 1: at least one digit is wrong somewhere |
| 6 | WrongAccountBankBranchChecksum | The BBAN's own internal checksum failed (only fires for countries whose rule is compiled in) |
| 7 | QRIBANNotAllowed | QR-IBAN presented where the rules reject it (Swiss QR-bill context) |
Codes 1–5 are the ones you'll see in practice, and code 5 dominates: it's the checksum catching the typo. A checksum failure localizes nothing by itself — any wrong digit anywhere produces it.
An IBAN is a country code, two check digits, and a domestic account number (the BBAN) packaged so a computer can catch typos before money moves. Validation is four gates: country, length, structure, checksum. The first three are lookup tables; the fourth is arithmetic, and it's the one doing real work.
Move the first four characters to the end. Replace every letter with a number (A=10, B=11, …, Z=35). Read the result as one big integer and take the remainder on division by 97. If the remainder is 1, the checksum passes. The math is ISO 7064 MOD 97-10, the same family of check-digit schemes behind ISO bank account numbers generally — and it catches every single-digit substitution and most transpositions.
Paste one IBAN or a hundred, one per line, and hit Validate. Each result shows the country, the expected length against the actual, the BBAN structure verdict, SEPA membership, and any error codes. When the checksum is the only failure, you also get the check digits that would fit the rest of the number — useful when the check digits themselves were the typo, and a hint to look elsewhere when they weren't. The engine is ibantools 4.5.4, loaded from this site; your numbers never leave the page.
Take GB82 WEST 1234 5698 7654 32. Strip the spaces: GB82WEST12345698765432, 22 characters, which matches the UK's rule. Structure: WEST (four letters) plus 14 digits, also right. Now the checksum. Move GB82 to the end and convert letters: W=32, E=14, S=28, T=29, G=16, B=11, so the check number is
3214282912345698765432161182
Divide by 97 and the remainder is exactly 1 — valid. Now the classic typo, the final digit 2 typed as 1: the check number becomes 3214282912345698765431161182, the remainder jumps to 71, and validation fails with error code 5. The tool then reports that check digits 12 would fit that (typo'd) remainder, which is a nudge, not a correction: only the receiving bank knows the real account number.
Four checks, in order: the country code must be in the official IBAN registry (97 countries participate), the total length must match that country's rule (22 characters for the UK, 22 for Germany, 27 for France), the BBAN must fit the country's structure (letters vs digits in the right slots), and the mod-97 checksum must land on exactly 1. A single mistyped digit anywhere breaks the checksum, which is why the checksum is the check that catches real-world typos.
The first two letters are the ISO country code (GB for the United Kingdom, DE for Germany, FR for France). The next two digits are check digits computed from the rest of the number using mod-97 arithmetic, so any typo in the account portion makes them mismatch. In GB82 WEST 1234 5698 7654 32, the GB is the country and the 82 is the checksum that validates everything after it.
No. Valid means well-formed: the checksum, length, and structure all check out, which rules out typos before you send money. It says nothing about whether the account is open, who owns it, or whether it can receive your currency. Only the receiving bank can confirm an account exists, either directly or when the payment is attempted. Treat a green result as "safe to hand to your bank," not as proof the account is live.
The United States, along with Canada, Australia, Japan, China, India, and Mexico, does not participate in the IBAN system; those domestic account numbers simply have no IBAN form. US accounts use a 9-digit routing number plus an account number, and international wires to them go by SWIFT/BIC code. Trying to validate a "US" IBAN returns an unknown-country error, which is exactly what should happen.
It depends on the country: 15 in Norway, 16 in Belgium, 18 in the Netherlands, 22 in the UK and Germany, 27 in France and Italy, and up to 29 in Brazil. The standard allows up to 34. That is why length alone can't tell you an IBAN is wrong without knowing the country — and why validators keep a per-country length table.
Yes. Paste them one per line into the box and every line is checked separately, with a valid/invalid count at the top. Spaces and dashes are stripped automatically and the check runs in your browser, so a spreadsheet of customer IBANs never leaves your machine.