Catch the bad IBAN before the bank does.
The complete SWIFT IBAN registry — 77 countries with correct lengths and BBAN structures, the ISO 7064 mod-97-10 checksum, and bank/branch/account extraction for DE, GB, FR, ES, IT and NL. Fully offline and deterministic: pre-validate payee details before a payment ever leaves, instead of waiting for the bank to bounce it.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://almanac.tools/v1/iban/validate?iban=GB82WEST12345698765432"{
"data": {
"input": "GB82WEST12345698765432",
"normalized": "GB82WEST12345698765432",
"country": "GB",
"isValidFormat": true,
"isValidChecksum": true,
"isValid": true,
"bankCode": "WEST",
"branchCode": "123456",
"accountNumber": "98765432"
}
}- 77
- IBAN registry countries
- 6
- Countries with bank/branch extraction
- mod-97
- ISO 7064 check-digit algorithm
- 50
- IBANs per batch call
The IBAN Validation API checks an International Bank Account Number for the right length, the correct per-country BBAN structure, and a valid ISO 7064 mod-97-10 check digit, then extracts the bank, branch and account fields for the countries with a known layout. It covers the full 77-country IBAN registry and is pure and deterministic — no network, no clock, no I/O.
Built for the awkward middle.
Structure + checksum, not a regex
We check the total length and the per-country BBAN pattern from the SWIFT IBAN Registry, then run the real ISO 7064 mod-97-10 checksum. A single transposed digit fails the check digit — the same failure the receiving bank would return, caught before you send.
Bank-field extraction
For DE, GB, FR, ES, IT and NL we split the validated IBAN into its bank code, branch/sort code and account number, so you can route, reconcile or display payee details without parsing the string yourself.
Offline and deterministic
Every call is pure math — no third-party lookup, no rate-limited registry, no surprises. The same IBAN always returns the same result, which makes it safe to put in a validation hot path or a batch reconciliation job.
Endpoints
Every route takes a Bearer API key. Validation runs before authentication, so a malformed request never costs you a credit.
| GET | /v1/iban/validate | Validate one IBAN (query: iban). Returns format, checksum and extracted fields. |
| GET | /v1/iban/countries | List all 77 registry countries with total length and a valid example. |
| POST | /v1/iban/batch | Validate up to 50 IBANs in one call (body: ibans[]). |
Frequently asked
What does the mod-97 checksum actually catch — and what can’t it?
It catches structural errors: a wrong length, a BBAN that doesn’t match the country’s pattern, and the vast majority of single-character typos and digit transpositions, because those change the ISO 7064 mod-97-10 check digit. What it cannot tell you is whether the account exists, is open, or is funded — that is a bank-side question no offline check can answer. This is pre-flight validation: it stops the obviously-broken IBANs, so a real payment failure is far more likely to be a genuine account issue than a typo.
Which countries get bank and branch field extraction?
Six: Germany (DE), the United Kingdom (GB), France (FR), Spain (ES), Italy (IT) and the Netherlands (NL). For a valid GB IBAN, for example, we return the 4-letter bank code, the 6-digit sort code as branchCode, and the 8-digit account number. All 77 registry countries are validated for length, structure and checksum; the bank/branch/account fields are simply null for countries without an implemented layout.
Do I have to normalize the input first?
No. Input is uppercased and all whitespace is stripped before validation, so "gb82 west 1234 5698 7654 32" validates identically to "GB82WEST12345698765432". The response echoes your raw input and the normalized form so you can store the clean version.
How many IBANs can I validate in one batch?
Up to 50 per POST /v1/iban/batch call. The response returns one full result object per input, in order, each with its own format, checksum and field-extraction outcome. Because validation is pure and never throws, an invalid IBAN in the list never breaks the others — it just comes back with isValid false and a reason.
What’s the difference between an IBAN and a national format like a UK sort code?
The IBAN is the international wrapper: a country code, two check digits, then the country’s own BBAN. For the UK that BBAN embeds the familiar 6-digit sort code and 8-digit account number, which our GB extraction pulls back out for you. We validate the IBAN as a whole (including the mod-97 check digit, which national formats don’t have); we don’t separately validate raw national numbers that aren’t wrapped in an IBAN.
What happens with an unknown or wrong-length country code?
You still get a fully populated result. If the first two characters aren’t a known IBAN country, or the length doesn’t match that country’s registry entry, isValidFormat is false and reason explains exactly what failed — for example "Unknown IBAN country code" or "Expected length 22 for GB". The checksum is computed honestly either way, so you can see whether the digits themselves were even self-consistent.
More from the almanac
Business Days & Settlement
Settlement-date and SLA-calendar math for 21 market & regional calendars.
VAT & GST Validation
Offline format + checksum validation for 36 VAT/GST schemes — no dependency on VIES uptime.
Postal Code Validation
Structural postal-code validation for 208 countries — including the 62 that have none.
Start building with IBAN Validation.
One key unlocks every Almanac API. Free tier, no credit card, deterministic results you can pin in a test.