Generator · Luxembourg data

Luxembourg TVA

Endpoint GET /v1/lu/tva

What it covers

Returns a valid Luxembourg TVA (VAT identifier) with a correct two-digit check pair. Use `format=vat` for the LU-prefixed VAT number. Set `invalid=true` for a TVA with a deliberately wrong check pair.

A Luxembourg VAT number (numéro de TVA) is the letters LU followed by eight digits: a six-digit body and a two-digit check pair. It is the simplest checksum in the fleet — the check pair is just the body taken modulo 89.

How it’s calculated

The two-digit check pair is simply the six-digit body taken modulo 89, zero-padded to two digits.

Algorithm

  1. Take the six-digit body (the part after the LU prefix, before the check pair).
  2. Interpret it as an integer and compute body mod 89. The result is in the range 0–88.
  3. Zero-pad that value to two digits — that is the check pair.
  4. The full VAT number is LU + the six-digit body + the two-digit check pair.

Worked example

LU + body 123456 + check pair ??

Body = 123456.
123456 mod 89: 89 × 1387 = 123443, and 123456 − 123443 = 13, so the remainder is 13.
13 zero-padded to two digits = "13".

The check pair is 13, so the VAT number is LU12345613.

Edge cases

  • The body’s first digit is drawn 1–9, so the six-digit body never has a leading zero.
  • Because the check pair is body mod 89, it always lands in 00–88 — the pair 89–99 can never occur in a valid LU VAT number.
  • A body that is an exact multiple of 89 gives check pair 00 (e.g. body 000089 → 00), which is valid, not a placeholder.

Gotchas

  • The modulus is 89, not 97 (the IBAN/mod-97 family) nor 11 — using the wrong modulus is the classic mistake here.
  • The check is over the six-digit body only; the LU country prefix is not part of the arithmetic.

Parameters

ParameterTypeDescription
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 TVAs from the rare corners.
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"national" | "vat"Rendering: bare 8-digit TVA (default) or the LU-prefixed VAT number.
invalidbooleanReturn a TVA with a deliberately wrong two-digit check pair.
seedintegerInteger seed for reproducible output: the same seed always yields the same record.

Response fields

FieldTypeDescription
valuestringThe identifier in the requested format (national or VAT).
digitsstringThe canonical, unprefixed 8-digit TVA.

Other generators for Luxembourg

See all generators for Luxembourg →

The same kind of identifier elsewhere

Try it

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