IBAN validator
Validate, format, batch-check, and generate IBAN numbers with MOD97 checksum verification.
An IBAN is self-checking, which is why it can be validated without contacting a bank. This tool runs the three checks the standard defines and reports them separately, so a failure tells you what is wrong rather than just that something is. First the length: ISO 13616 assigns each country a fixed IBAN length, and Germany's 22 characters are not negotiable. Then the structure: the country's BBAN pattern says which positions must be digits and which may be letters, so a letter O typed where a zero belongs is caught before the arithmetic starts. Last the checksum: the MOD-97 remainder from ISO 7064, which catches every single-character error and every transposition of adjacent characters. All three run on your own machine, on 69 country formats, one IBAN at a time or a whole pasted list.
Key facts about IBAN validator
| Checks performed | three, reported independently — country length, ISO 13616 BBAN structure, ISO 7064 MOD-97 checksum |
|---|---|
| Countries in the registry | 69, each with its fixed length and BBAN structure string |
| Checksum algorithm | move the first four characters to the end, replace letters with 10–35, take the remainder modulo 97; a valid IBAN gives exactly 1 |
| Why 97 | a prime just under 100, which makes every single-digit error and every adjacent transposition produce a different remainder |
| Structure notation | SWIFT registry form — 4!a6!n8!n means 4 letters, 6 digits, 8 digits, in that order |
| Longest and shortest | Malta at 31 characters, Norway at 15 |
| Check digits | characters 3 and 4, always numeric, computed as 98 minus the MOD-97 remainder of the rearranged string |
| SEPA coverage | flagged per country; the UK is still a SEPA scheme participant after Brexit, as a non-EEA member |
| What it cannot tell you | whether the account exists, whether it is open, or whose name is on it — no public algorithm encodes that |
| Generator | builds a structurally valid, checksum-correct IBAN for test data; the account behind it does not exist |
| Batch mode | one IBAN per line, validated in a single pass, exported as CSV with a per-row status and error |
| Formatting | grouped in fours for display only — spaces are stripped before validation and are not part of the IBAN |
What happens to your file
No IBAN you type ever leaves the browser. Validation is arithmetic — a remainder computed digit by digit in JavaScript — plus two pattern checks against a country table shipped with the page, so there is nothing to look up remotely and no request is made while you use the tool. That matters more here than on most pages: an IBAN is a bank identifier, and pasting a list of them into a site that posts them to a server hands over exactly the data a payment-fraud operation wants. Batch validation runs the same local code over every line. The CSV export is assembled in memory and downloaded through a local object URL. Nothing is stored, nothing is logged, and closing the tab discards every IBAN you entered.
About this tool
- 1
Paste the IBAN
Spaces and hyphens are fine and case does not matter — everything is normalised before checking. Validation starts once there are at least 15 characters, so a half-typed IBAN does not flash a failure at you.
- 2
Read which check failed
A failure names the cause: wrong length for that country, a BBAN that does not match the country's pattern, or check digits that do not reconcile. Each points at a different kind of mistake.
- 3
Confirm all three passed
On a valid IBAN, three green tiles appear — Length, Structure and MOD-97 — alongside the country, check digits, BBAN and SEPA status. All three have to pass; none of them is implied by the others.
- 4
Check the BBAN structure line
It shows the country's pattern in both SWIFT notation and plain words, which is the quickest way to see whether a character that should be a letter has been typed as a digit.
- 5
Use batch mode for a list
Switch to Batch, paste one IBAN per line and validate them all at once. The summary bar shows the valid-to-invalid split and each row carries its own error.
- 6
Export the results
Export CSV downloads the batch results with a status and an error message per row — the form you can hand back to whoever supplied the list.
- 7
Generate test IBANs
Generate mode builds a structurally valid, checksum-correct IBAN for any of the 69 countries. Use it for fixtures and form testing; it is not a real account.
| Input tolerance | spaces, non-breaking spaces and hyphens are ignored; lower case is upshifted automatically |
|---|---|
| Validation trigger | live, from 15 characters onward — short input shows nothing rather than a premature failure |
| Batch size | unbounded in principle; each line is an independent check with its own result row |
| Batch export | CSV with IBAN, status, country and error columns |
| Arithmetic | chunked modulo, so there is no BigInt dependency and no precision limit at 31 characters |
| Generator input | bank code plus account number, zero-padded to the country's BBAN length; a padded value that breaks the structure is rejected with the reason |
| Browser support | any current browser — Chrome, Edge, Firefox, Safari; no install |
| Offline | works with no network once the page has loaded |
- A valid IBAN is not a real account. The checksum proves the string is internally consistent, nothing more — always confirm the account separately before sending money.
- The commonest real-world failure is a letter O typed for a zero, or a 1 for an I. The structure check catches those before the checksum does, and tells you which position is wrong.
- Never send an IBAN change that arrives by email without confirming it by phone on a number you already had; a correctly formed IBAN in a convincing invoice is the entire mechanic of payment-diversion fraud.
- Spaces exist for humans. The IBAN itself has none, so strip them before storing one in a database or comparing two for equality.
- Store IBANs as the raw uppercase string and format them for display; storing the grouped form invites comparison bugs when one record has spaces and another does not.
- If a bank rejects an IBAN this tool accepts, the problem is downstream of the standard — a closed account, a bank that does not accept that payment type, or a BIC mismatch — not the number's structure.
- Validate a supplier list in batch before a payment run rather than one at a time after a rejection; the CSV export gives you a row-by-row record of what failed and why.
- Length, BBAN structure and MOD-97 checksum reported as three separate checks
- 69 country formats from the ISO 13616 registry
- Batch validation of a pasted list with CSV export
- Test-IBAN generator for any supported country
- Country, check digits, BBAN, SEPA status and currency on every valid result
- Entirely offline — no IBAN is ever transmitted
- Checking a supplier's bank details from an invoice before a payment run.
- Validating a whole customer or payroll list in one pass and exporting the failures.
- Working out why a transfer was rejected, by seeing which of the three checks the number fails.
- Generating structurally valid test IBANs for form validation and fixtures without using a real account.
- Confirming that an IBAN a colleague retyped from a PDF matches the country's expected structure.
- Verifying a payment-detail change request before acting on it.
Related tools
View allWorks well with this5
More in Finance1
Updated