Ever wondered how your bank instantly knows you fat-fingered an IBAN before it even checks if the account exists? It's a checksum: ISO 13616's mod-97 algorithm.
Here's the short version: move the first four characters to the end, convert letters to numbers (A=10, B=11...), then check if the resulting number mod 97 equals 1. That's it — no database lookup needed to catch most typos.
// simplified version of the check
function ibanChecksumValid(iban) {
const rearranged = iban.slice(4) + iban.slice(0, 4);
const numeric = rearranged.replace(/[A-Z]/g, c => c.charCodeAt(0) - 55);
let remainder = 0;
for (const digit of numeric) remainder = (remainder * 10 + Number(digit)) % 97;
return remainder === 1;
}
Fine for a side project. Once you're validating IBANs from real users, you also want country-specific length checks, BBAN structure validation, and ideally a formatted, human-readable output — which is more code than you want to own for something this boilerplate.
If you'd rather not maintain that: Validate is a small API I built that handles this (plus VAT/email/phone/credit-card format checks) as a single JSON call. Free tier is 100 requests/month, no card required. Same account also runs QR API (QR code generation) and Currency API (exchange rates) if useful.
Top comments (0)