Tool

IBAN Validator

Checks format, per-country length, and MOD 97 check digits per ISO 13616. Runs 100% in your browser.

100% Client-SideNo Server LogsNo Signup
Valid IBAN — passes all checks
Country
SI · Slovenia
Check digits
73
BBAN
012340123456701
Format pattern
5!n8!n2!n
Length
19 chars
Formatted
SI73 0123 4012 3456 701
  • Character set (2 letters + 2 digits + BBAN)
  • Country code SI · Slovenia
  • Length 19/19
  • MOD 97 check digits

⚠️ This tool only verifies the format and check digits against ISO 13616. A valid IBAN does not guarantee the account exists, is open, or belongs to a specific person or institution. Always confirm with the recipient or their bank before initiating a transfer.

Validate IBANs in your own code

The same MOD 97-10 check this site runs in your browser. Copy a self-contained snippet — no API key, no network call for the JS/Python versions.

// Validate an IBAN client-side — no API, no data leaves the browser.
// Full per-country length table: https://ibantool.com/iban
const LENGTHS = { DE: 22, FR: 27, IT: 27, ES: 24, GB: 22, NL: 18, BE: 16,
  CH: 21, AT: 20, PL: 28, SE: 24, NO: 15, DK: 18, FI: 18, IE: 22, PT: 25 };

function cleanIban(s) {
  return s.replace(/[^A-Z0-9]/gi, "").toUpperCase();
}

function mod97(iban) {
  const rearranged = iban.slice(4) + iban.slice(0, 4);
  const digits = rearranged.replace(/[A-Z]/g, (c) => (c.charCodeAt(0) - 55).toString());
  let rem = 0;
  for (const d of digits) rem = (rem * 10 + Number(d)) % 97;
  return rem;
}

function validateIban(input) {
  const iban = cleanIban(input);
  if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]+$/.test(iban)) return { valid: false, reason: "bad format" };
  const len = LENGTHS[iban.slice(0, 2)];
  if (len && iban.length !== len) return { valid: false, reason: `length should be ${len}` };
  if (mod97(iban) !== 1) return { valid: false, reason: "check digits" };
  return { valid: true, iban };
}

validateIban("DE89 3704 0044 0532 0130 00");
// { valid: true, iban: "DE89370400440532013000" }

Note: the curl example calls a third-party service (openiban.com) because ibantool itself has no server API — everything here runs in the browser. Structural validation does not confirm an account exists.

IBAN validation FAQ

How does the IBAN validator work?
It checks three things per ISO 13616: the character set (2 letters, 2 digits, then A–Z / 0–9), the per-country length, and the MOD 97-10 check digits. An IBAN passes only when all three checks succeed. Everything runs in your browser.
What is the MOD 97 check?
MOD 97-10 is the checksum algorithm ISO 13616 uses. The IBAN is rearranged and letters converted to numbers, then the whole thing is taken mod 97 — a valid IBAN has a remainder of 1. This catches single-digit errors and most swap errors.
Does validation tell me the account exists?
No. The validator only confirms the IBAN is structurally well-formed and the check digits are correct. It does not verify the account exists, is open, or belongs to anyone. Confirm with the recipient’s bank before sending money.
Why does my IBAN fail the length check?
Each country has a fixed IBAN length. A German IBAN is always 22 characters, a Belgian one 16. If your IBAN is too short or too long for its country code, the length check fails — usually a typo or a missing/extra character.
Is this IBAN validator free and private?
Yes. It is free with no signup, and validation runs entirely client-side. The IBAN you paste never leaves your browser and is not logged or stored.
Can I use it for payment integration testing?
Yes. Paste a test IBAN to confirm it passes format and MOD 97 checks, then inspect the breakdown. For sample IBANs per country, see the IBAN example pages.