Generator · Estonian data

Estonian IBAN

Endpoint GET /v1/ee/iban

What it covers

Returns a valid Estonian IBAN with a correct checksum. Pin the issuing bank with `bankCode` (2-digit bank code) or `bankName` (mutually exclusive), or let it be chosen at random. Set `invalid=true` to get an IBAN with deliberately wrong check digits, for testing checksum validators.

An IBAN wraps a country’s domestic account number (the BBAN) with a two-character country code and two ISO 13616 check digits. The check digits guard the whole string with an ISO 7064 MOD 97-10 checksum — the same family as the mod-97 used across European identifiers. Some countries (e.g. France) also carry a second, national check digit inside the BBAN, which this generator computes too, so the result passes strict domestic validation and not merely the outer mod-97.

How it’s calculated

The two check digits (positions 3–4) make the whole IBAN satisfy ISO 7064 MOD 97-10 — i.e. the rearranged, letters-to-digits value is ≡ 1 (mod 97).

Algorithm

  1. Start from the BBAN (the country’s domestic account number).
  2. Convert every letter to two digits: A=10, B=11, …, Z=35. Digits stay as they are.
  3. Append the country code (also letter→number converted) and the two digits "00" as a placeholder for the check digits.
  4. Interpret that whole string as one big integer and take it modulo 97.
  5. The check digits are 98 − (that remainder), written as two digits (zero-padded).
  6. To validate later: move the leading four characters (country code + check digits) to the end, convert letters to digits, and confirm the result is ≡ 1 (mod 97).

Worked example

DE + BBAN 370400440532013000 (check digits = ?)

BBAN 370400440532013000 is all digits, so it stays as-is.
Country code DE → D=13, E=14 → "1314".
Build the check string: 370400440532013000 + 1314 + 00 = 370400440532013000131400.
370400440532013000131400 mod 97 = 9.
check digits = 98 − 9 = 89.

The check digits are 89, so the IBAN is DE89370400440532013000 (which validates: rearranged, it is ≡ 1 mod 97).

Edge cases

  • The BBAN length and layout differ by country (a German IBAN is 22 characters, a Maltese one 31), but the outer checksum is identical everywhere.
  • With invalid=true the check digits are shifted by 1–96 mod 97, so the IBAN can never accidentally stay congruent — it always fails mod-97 while keeping the right length and country code.

Gotchas

  • The checksum runs on a rearranged string: the first four characters (country code + check digits) move to the END before the mod-97 is taken. Computing mod-97 on the IBAN as written gives the wrong answer.
  • Letters are converted to numbers before the arithmetic: A=10, B=11, … Z=35. The country code letters are converted the same way.

Parameters

ParameterTypeDescription
bankCodestringPin the issuing bank by its 2-digit bank code. Mutually exclusive with bankName.
bankNamestringPin the issuing bank by a case-insensitive name fragment. Mutually exclusive with bankCode.
countinteger1–1000Number of records to return, 1–1000 (your plan may lower this). Omitted returns a single record; set it for a batch.
edgebooleanRestrict output to valid edge-case IBANs from the rare corners of the format.
extremebooleanReturn a correct value wrapped in a hostile encoding (untrimmed whitespace, invisible/zero-width characters, BOM, or bidi/combining marks). Homoglyphs are excluded so the value stays machine-parseable; it still validates after normalisation.
format"grouped" | "compact"IBAN rendering: grouped or compact. Default grouped.
invalidbooleanReturn an IBAN with deliberately wrong check digits, for testing validators.
seedintegerInteger seed for reproducible output: the same seed always yields the same record.

Response fields

FieldTypeDescription
valuestringThe IBAN in the requested format.
electronicFormatstringThe space-free electronic form of the IBAN.
bankCodestringThe bank identifier embedded in the IBAN.
bankNamestringHuman-readable name of the issuing bank.

Other generators for Estonia

See all generators for Estonia →

The same kind of identifier elsewhere

Try it

Generate a live example below — every response is valid by format and entirely synthetic.