Skip to main content

IBAN validator

Validate, format, batch-check, and generate IBAN numbers with MOD97 checksum verification.

Free & unlimitedWorks offline
Mode
IBAN
Try:
All processing happens in your browser. No data is sent to any server.

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

Key facts about IBAN validator
Checks performedthree, reported independently — country length, ISO 13616 BBAN structure, ISO 7064 MOD-97 checksum
Countries in the registry69, each with its fixed length and BBAN structure string
Checksum algorithmmove the first four characters to the end, replace letters with 10–35, take the remainder modulo 97; a valid IBAN gives exactly 1
Why 97a prime just under 100, which makes every single-digit error and every adjacent transposition produce a different remainder
Structure notationSWIFT registry form — 4!a6!n8!n means 4 letters, 6 digits, 8 digits, in that order
Longest and shortestMalta at 31 characters, Norway at 15
Check digitscharacters 3 and 4, always numeric, computed as 98 minus the MOD-97 remainder of the rearranged string
SEPA coverageflagged per country; the UK is still a SEPA scheme participant after Brexit, as a non-EEA member
What it cannot tell youwhether the account exists, whether it is open, or whose name is on it — no public algorithm encodes that
Generatorbuilds a structurally valid, checksum-correct IBAN for test data; the account behind it does not exist
Batch modeone IBAN per line, validated in a single pass, exported as CSV with a per-row status and error
Formattinggrouped 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. 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. 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. 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. 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. 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. 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. 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.

Specs & compatibility
Input tolerancespaces, non-breaking spaces and hyphens are ignored; lower case is upshifted automatically
Validation triggerlive, from 15 characters onward — short input shows nothing rather than a premature failure
Batch sizeunbounded in principle; each line is an independent check with its own result row
Batch exportCSV with IBAN, status, country and error columns
Arithmeticchunked modulo, so there is no BigInt dependency and no precision limit at 31 characters
Generator inputbank 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 supportany current browser — Chrome, Edge, Firefox, Safari; no install
Offlineworks 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.
Three independent checks. The length must match the value ISO 13616 assigns to that country — 22 characters for Germany, 18 for Denmark, 31 for Malta — and this is fixed, not a range. The BBAN, everything after the first four characters, must match the country's structure: Britain's pattern is four letters then fourteen digits, Germany's is eighteen digits. Then the checksum: move the first four characters to the end, replace each letter with a number (A is 10 through Z is 35), and take the resulting long number modulo 97. A valid IBAN leaves a remainder of exactly 1. This page runs all three and reports each separately, because each failure means something different.
Because it is a prime close to but below 100, which gives the check two useful properties. Every single-character error changes the remainder, so no typo can leave the number looking valid. So does every transposition of two adjacent characters, which is the other mistake humans make constantly when copying digits. Being prime means no error can cancel out through a shared factor, and being just under 100 means the check digits fit in exactly two positions. The scheme is standardised as ISO 7064 MOD-97-10 and the same arithmetic is used for other European identifiers.
No, and this is the most important limitation to understand. The checksum proves only that the string is internally consistent — that nobody mistyped it. It cannot tell you whether the account was ever opened, whether it is still open, whether it can receive the payment type you intend, or whose name is on it. No public algorithm encodes any of that, because it is private bank data. Confirmation of Payee schemes exist in some countries to check the name against the account, but they require a bank connection. Validate the format here, then confirm the account through the bank or through the payee on a channel you already trusted.
Sixty-nine, covering every SEPA participant plus the non-European countries that have adopted IBAN, including Türkiye, Israel, Saudi Arabia, the UAE, Brazil, Pakistan, Ukraine, Egypt and Kazakhstan. Each entry carries the country's fixed IBAN length and its BBAN structure string from the registry, and the Supported countries list shows both alongside a clickable example. If a country code is not in the registry the tool says so explicitly rather than guessing a length — the United States is the notable absence, since it uses routing and account numbers rather than IBAN.
No. Generate mode produces a string that satisfies all three checks — the right length, a BBAN matching the country's structure, and check digits computed so the MOD-97 remainder is 1 — but the bank code and account number are either the ones you typed or random characters. There is no account behind them. That is exactly what makes them suitable as test fixtures for form validation, database constraints and QA data, and exactly why they must never be used as a payment destination. If you supply a bank code the structure rejects, the tool tells you rather than silently emitting a broken number.
No. The whole validation is arithmetic plus two pattern matches, running in JavaScript inside your browser tab against a country table that ships with the page. There is no API call, no logging and no analytics event carrying the value, and the tool keeps working with the network disconnected — which you can verify by turning wi-fi off and pasting an IBAN. Batch mode runs the same local code over every line, and the CSV export is built in memory and downloaded locally. Nothing persists after you close the tab.
View all

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy