A Luxembourg IBAN validator that checks every structural rule in one step: the mandatory 20-character total length, the 3-digit numeric bank identifier, the 13-character alphanumeric account field, and the ISO 7064 MOD-97-10 checksum that must equal exactly 1. Results appear as you type, and a Copy button delivers the IBAN in the standard spaced format ready to paste into a payment form or wire instruction.
How it works
Luxembourg IBANs follow the ISO 13616 standard published by SWIFT. The full 20-character string breaks down into four parts:
| Part | Position | Length | Format |
|---|---|---|---|
| Country code | 1–2 | 2 | LU (always) |
| Check digits | 3–4 | 2 | 00–99 |
| Bank identifier | 5–7 | 3 | Numeric only |
| Account number | 8–20 | 13 | Alphanumeric |
Checksum algorithm (ISO 7064 MOD-97-10):
- Strip whitespace and convert to uppercase.
- Move the first four characters (
LUkk) to the end of the string. - Replace every letter with its two-digit numeric equivalent: A becomes
10, B becomes11, and so on up to Z becoming35. - Treat the resulting digit string as a single large integer and compute its remainder when divided by 97, folding progressively to avoid overflow.
- The IBAN is valid if and only if the remainder is exactly 1.
The tool also separately validates the BBAN fields: the bank identifier must be exactly 3 numeric digits, and the account field must be exactly 13 alphanumeric characters. Any structural mismatch is reported with a specific error message so you know exactly where to look.
Worked example
Take the well-known Luxembourg test IBAN LU28 0019 4006 4475 0000:
- Country code:
LU - Check digits:
28 - Bank identifier:
001(BGL BNP Paribas) - Account number:
9400644750000
Rearrangement step: move LU28 to the end:
9400644750000LU28
Letter expansion: L becomes 21, U becomes 30:
940064475000021 30 28
Concatenated digit string: 9400644750000213028
MOD-97 check: 9400644750000213028 mod 97 = 1 — the IBAN is valid.
The formatted output is LU28 0019 4006 4475 0000, grouped in blocks of 4
for readability (the final group has just 4 characters because 20 divides
evenly into five groups of 4).
Every calculation runs locally in your browser — no number is ever sent to a server or stored anywhere.