Generator · German data

German Steuer-IdNr

Endpoint GET /v1/de/steuer-id

What it covers

Returns a valid German Steuer-IdNr (personal tax identification number) with a correct ISO 7064 MOD 11,10 check digit. The number is non-semantic. Set `invalid=true` for a number with a deliberately wrong check digit.

How it’s calculated

The eleventh digit of the German Steuer-IdNr is an ISO/IEC 7064 MOD 11,10 check digit computed by a recursive product-and-double folding of the ten payload digits, always yielding a single decimal 0-9.

Algorithm

  1. Take the ten payload digits (positions 1-10) of the Steuer-IdNr, left to right. The first digit is never 0, and by the modern repetition rule exactly one digit value appears two or three times while every other value appears at most once (this rule is a property of a valid number, not part of the check-digit arithmetic).
  2. Initialise a running value called `product` to 10.
  3. For each payload digit `d`, in order from left to right, do the following two steps.
  4. Step A (add mod 10, mapping 0 to 10): compute `sum = (d + product) mod 10`. If that `sum` equals 0, replace it with 10.
  5. Step B (double mod 11): compute `product = (sum * 2) mod 11`.
  6. After all ten digits have been processed, compute the check digit as `check = (11 - product) mod 10`. This is always a single decimal digit 0-9 — there is no unrepresentable residue and never a redraw case.
  7. The complete 11-digit Steuer-IdNr is the ten payload digits followed by this check digit.

Worked example

Steuer-IdNr with payload 1234567890 and check digit ?

Start: product = 10.
d=1: sum = (1+10) mod 10 = 1 (not 0); product = (1*2) mod 11 = 2.
d=2: sum = (2+2) mod 10 = 4; product = (4*2) mod 11 = 8.
d=3: sum = (3+8) mod 10 = 1; product = (1*2) mod 11 = 2.
d=4: sum = (4+2) mod 10 = 6; product = (6*2) mod 11 = 12 mod 11 = 1.
d=5: sum = (5+1) mod 10 = 6; product = (6*2) mod 11 = 12 mod 11 = 1.
d=6: sum = (6+1) mod 10 = 7; product = (7*2) mod 11 = 14 mod 11 = 3.
d=7: sum = (7+3) mod 10 = 0 -> mapped to 10; product = (10*2) mod 11 = 20 mod 11 = 9.
d=8: sum = (8+9) mod 10 = 7; product = (7*2) mod 11 = 14 mod 11 = 3.
d=9: sum = (9+3) mod 10 = 2; product = (2*2) mod 11 = 4.
d=0: sum = (0+4) mod 10 = 4; product = (4*2) mod 11 = 8.
Final product = 8. Check digit = (11 - 8) mod 10 = 3.

The check digit is 3, so the full Steuer-IdNr is 12345678903.

Edge cases

  • zero-check-digit corner: the recurrence can legitimately produce a check digit of 0 as the eleventh digit; the edge generator searches for such payloads to exercise consumers that mishandle a trailing 0.
  • triple-repetition corner: a valid number may have its repeated digit value occur three times (the maximum the modern rule allows); code that only looks for a single duplicate misses this.
  • leading-small corner: the first payload digit may be as small as 1 but never 0.

Gotchas

  • This is the pure recursive ISO 7064 MOD 11,10 scheme, NOT a weighted-sum mod-11 (there are no per-position weights). Every step folds a single running `product`.
  • In Step A the 0->10 remapping is essential: when `(d + product) mod 10` is 0 you must use 10 before doubling, otherwise the recurrence collapses.
  • Because the final step is `(11 - product) mod 10`, the result is always a single decimal digit 0-9 — there is never an 'X' or a redraw, unlike weighted mod-11 schemes.
  • The repetition rule (one value appears 2-3 times, others at most once) constrains which payloads are valid Steuer-IdNrs but does not enter the check-digit arithmetic; the check digit is computed over whatever ten payload digits are present.

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 Steuer-IdNrs 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.
invalidbooleanReturn a Steuer-IdNr with a deliberately wrong ISO 7064 check digit.
seedintegerInteger seed for reproducible output: the same seed always yields the same record.

Response fields

FieldTypeDescription
valuestringThe full 11-digit Steuer-IdNr.
digitsstringThe same 11 digits (no separators).

Other generators for Germany

See all generators for Germany →

The same kind of identifier elsewhere

Try it

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