Overview
Validates an International Bank Account Number using the ISO 13616 mod-97 check, and breaks it into its parts: the two-letter country code, the two check digits, and the BBAN account portion. Spaces and dashes are ignored, the reformatted IBAN is shown in standard four-character groups, and the verdict appears live as you type. Everything is computed locally.
How It Works
Paste an IBAN such as DE89 3704 0044 0532 0130 00 into the field. The tool strips non-alphanumeric characters, uppercases, and splits off country, check digits, and BBAN, displaying each in its own card along with the full IBAN regrouped in fours. The green or red verdict line shows whether the mod-97 checksum passes. Validation runs on every keystroke, so you can correct one character at a time and watch the verdict flip.
Step-by-Step Usage Guide
- Paste the IBAN with or without spaces; formatting is normalized automatically.
- Read the verdict line for the mod-97 checksum result.
- Check the country code, check digits, and BBAN cards to spot obviously wrong parts.
- Compare the length against your recipient country's expected length before trusting a pass.
Technical Specifications & Standards
The algorithm follows ISO 13616 exactly for the checksum step. The IBAN is rearranged so the BBAN comes first, followed by the country code and check digits; each letter is replaced by its numeric value, A as 10 through Z as 35; and the resulting digit string must leave remainder 1 when divided by 97. The implementation performs that division piecewise, carrying the running remainder into seven-digit chunks, which keeps every intermediate value far below the safe-integer limit of JavaScript numbers; computing the mod-97 of the full digit string in one parse would silently lose precision on long IBANs and produce wrong verdicts, a classic bug in homegrown validators. What the tool does not check is country-specific structure. ISO 13616 fixes a total length per country, from 15 characters in Norway up to 34 elsewhere, and prescribes the BBAN's internal format; this validator accepts any length from five characters up, so an invented country code with matching check digits can still pass the checksum. The checksum is also an integrity check, not an existence check: a valid remainder proves the number was not mistyped, but not that the account exists or that the country code is real. Treat a green verdict as one signal alongside your bank's own validation before moving money.
Targeted Use Cases
- Catching typos in an IBAN before entering it into a payment form.
- Sanity-checking vendor bank details during onboarding, as one check among several.
- Teaching or verifying how the mod-97 algorithm produces a remainder of one.
- Extracting the BBAN portion for systems that need the national account number separately.
Notes & Gotchas
- Do not treat a passing checksum as proof the account exists or the country is real; it is a typo check, not an account lookup.
- Verify the total length against the recipient country's IBAN registry entry; this tool does not enforce per-country lengths.
- Paste the IBAN without restructuring it; spaces and dashes are stripped, but reordering digits defeats any validator.
- For payments, confirm the beneficiary name alongside the IBAN; a valid checksum on the wrong account is still the wrong account.
Frequently Asked Questions
What does the mod-97 check actually verify?
That the digits were not mistyped. The check digits are computed from the country code and BBAN so that the whole string, rearranged and taken modulo 97, leaves remainder 1. It detects transcription errors but says nothing about whether the account exists.
Why did a wrong country code still pass?
The checksum only requires internal consistency. If both the country letters and the check digits were fabricated together, the remainder can still be 1. The tool does not validate country-specific lengths or formats, which is a real gap versus ISO 13616.
How are spaces and lowercase letters handled?
All non-alphanumeric characters are stripped and the remainder is uppercased before validation, so spaced and lowercase variants of the same IBAN produce identical results.
Why is the calculation done in chunks?
A full IBAN's digit string is far longer than the 15-17 digits JavaScript can represent exactly. The validator carries the running remainder through seven-digit chunks, which keeps every step within safe integer range and avoids the silent precision errors that plague naive implementations.