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
- 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).
- Initialise a running value called `product` to 10.
- For each payload digit `d`, in order from left to right, do the following two steps.
- Step A (add mod 10, mapping 0 to 10): compute `sum = (d + product) mod 10`. If that `sum` equals 0, replace it with 10.
- Step B (double mod 11): compute `product = (sum * 2) mod 11`.
- 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.
- 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
| Parameter | Type | Description |
|---|---|---|
| count | integer1–1000 | Number of records to return, 1–1000 (your plan may lower this). Omitted returns a single record; set it for a batch. |
| edge | boolean | Restrict output to valid edge-case Steuer-IdNrs from the rare corners. |
| extreme | boolean | Return 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. |
| invalid | boolean | Return a Steuer-IdNr with a deliberately wrong ISO 7064 check digit. |
| seed | integer | Integer seed for reproducible output: the same seed always yields the same record. |
Response fields
| Field | Type | Description |
|---|---|---|
| value | string | The full 11-digit Steuer-IdNr. |
| digits | string | The same 11 digits (no separators). |
Other generators for Germany
German companyGerman company nameGerman email addressGerman HandelsregisternummerGerman IBANGerman personGerman person nameGerman Personalausweis numberGerman product or service offeringGerman USt-IdNrGerman vehicle registration plateGerman Wirtschafts-IdNr
See all generators for Germany →The same kind of identifier elsewhere
Austrian data · Austrian SVNRBelgian data · Belgian RijksregisternummerBulgarian data · Bulgarian EGNCroatian data · Croatian JMBGCroatian data · Croatian OIBCypriot data · Cyprus TICCzech data · Czech rodné čísloDanish data · Danish CPRDutch data · Dutch BSNEstonian data · Estonian isikukoodFinnish data · Finnish henkilötunnusFinnish data · Finnish Y-tunnusFrench data · French NIRGreek data · Greek AFMGreek data · Greek AMKAHungarian data · Hungarian adóazonosító jelHungarian data · Hungarian személyi azonosítóHungarian data · Hungarian TAJIrish data · Irish PPSNItalian data · Italian Codice FiscaleLatvian data · Latvian personas kodsLithuanian data · Lithuanian asmens kodasLuxembourg data · Luxembourg matriculePolish data · Polish PESELPortuguese data · Portuguese NIFRomanian data · Romanian CNPSlovak data · Slovak rodné čísloSlovenian data · Slovenian davčna številkaSlovenian data · Slovenian EMŠOSpanish data · Spanish DNISpanish data · Spanish NIESwedish data · Swedish personnummer
Try it