Generator · Austrian data
Austrian UID
Endpoint GET /v1/at/uid
What it covers
Returns a valid Austrian UID (Umsatzsteuer-Identifikationsnummer) with a correct check digit. Use `format=vat` for the intra-EU `AT`-prefixed form. Set `invalid=true` for a UID with a deliberately wrong check digit.
How it’s calculated
The Austrian UID's 8th digit is a Luhn-variant check digit over the seven payload digits: even-position (1-indexed) digits get the Luhn doubling transform, the rest pass through, and the total is closed with a +4 offset before taking the 10's-complement mod 10.
Algorithm
- Take the seven payload digits c1 c2 c3 c4 c5 c6 c7 (the digit string after the literal 'U', before the check digit). The first digit is 1-9 in the canonical generator; leading zero is reserved for the edge case.
- Define the Luhn-variant transform s(x) = floor(x / 5) + ((2 * x) mod 10). This is exactly the value you'd get by doubling x and adding the two resulting decimal digits (e.g. 8 -> 16 -> 1+6 = 7; and floor(8/5)+(16 mod 10) = 1+6 = 7).
- Walk the payload left to right using 0-based index. At odd index (i.e. positions 2, 4, 6 counting from 1 — the 2nd, 4th, 6th payload digits) replace the digit with s(digit). At even index (positions 1, 3, 5, 7) keep the digit as-is.
- Sum all seven transformed/passed-through values into 'sum'.
- Add the fixed offset 4: total = sum + 4.
- Compute the check digit as (10 - (total mod 10)) mod 10. The outer 'mod 10' maps a raw complement of 10 back to 0, so the result is always a single decimal digit.
- Append the check digit as the 8th digit. Optionally prefix 'U' (national form) or 'ATU' (intra-EU VAT form).
Worked example
Austrian UID with payload 1234567 and unknown check digit: U1234567?
Payload digits (0-based index): [0]=1, [1]=2, [2]=3, [3]=4, [4]=5, [5]=6, [6]=7.
index 0 (odd? no) passthrough -> 1
index 1 (odd) s(2) = floor(2/5) + (4 mod 10) = 0 + 4 = 4
index 2 (even) passthrough -> 3
index 3 (odd) s(4) = floor(4/5) + (8 mod 10) = 0 + 8 = 8
index 4 (even) passthrough -> 5
index 5 (odd) s(6) = floor(6/5) + (12 mod 10) = 1 + 2 = 3
index 6 (even) passthrough -> 7
sum = 1 + 4 + 3 + 8 + 5 + 3 + 7 = 31
total = sum + 4 = 35
check = (10 - (35 mod 10)) mod 10 = (10 - 5) mod 10 = 5The check digit is 5, giving the full UID body 12345675 (national form U12345675, intra-EU form ATU12345675).
Edge cases
- The check transform always yields exactly one decimal digit (the outer mod 10 collapses a complement of 10 to 0), so no payload prefix ever needs to be redrawn.
- The canonical generator draws the first payload digit as 1-9, so the standard body is never leading-zero; a leading-zero payload is emitted only by the separate edge generator.
Gotchas
- This is NOT plain Luhn. Two things differ from standard Luhn: (a) the transformed positions are the even-from-the-left payload digits (indices 1,3,5 zero-based) rather than an every-other pattern anchored at the check digit, and (b) a fixed +4 offset is added to the sum before taking the 10's-complement.
- The Luhn-variant transform s(x) = floor(x/5) + ((2x) mod 10) is the arithmetic-closed form of 'double the digit and add its digits together' — don't mistake it for a simple doubling.
- The 'U' (and 'AT' for the VAT form) are literal, non-numeric prefixes and are excluded from the checksum computation; only the seven numeric payload digits feed the algorithm.
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 UIDs 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. |
| format | "national" | "vat" | Rendering: `national` U-prefixed form (default) or `vat` intra-EU form. |
| invalid | boolean | Return a UID with a deliberately wrong 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 UID in the requested format (national or VAT). |
| digits | string | The canonical 8 digits (7 payload + 1 check). |
Other generators for Austria
Austrian companyAustrian company nameAustrian email addressAustrian FirmenbuchnummerAustrian IBANAustrian personAustrian person nameAustrian product or service offeringAustrian SteuernummerAustrian SVNRAustrian vehicle registration plate
See all generators for Austria →The same kind of identifier elsewhere
Belgian data · Belgian OndernemingsnummerBulgarian data · Bulgarian EIKCzech data · Czech IČODanish data · Danish CVRDutch data · Dutch btw-idDutch data · Dutch KvK numberDutch data · Dutch RSINEstonian data · Estonian KMKREstonian data · Estonian registrikoodFrench data · French SIRENGerman data · German HandelsregisternummerGerman data · German Personalausweis numberGerman data · German USt-IdNrGerman data · German Wirtschafts-IdNrHungarian data · Hungarian adószámHungarian data · Hungarian cégjegyzékszámIrish data · Irish CRO numberIrish data · Irish VAT numberItalian data · Italian Partita IVALatvian data · Latvian registracijas numursLithuanian data · Lithuanian įmonės kodasLithuanian data · Lithuanian PVM (VAT) numberLuxembourg data · Luxembourg TVAMaltese data · Maltese identity card numberMaltese data · Maltese VAT numberPolish data · Polish driving licence numberPolish data · Polish ID card numberPolish data · Polish KRS numberPolish data · Polish land and mortgage register numberPolish data · Polish NIPPolish data · Polish passport numberPolish data · Polish REGONPortuguese data · Portuguese Cartão de Cidadão numberRomanian data · Romanian CUI/CIFSlovak data · Slovak IČ DPHSlovak data · Slovak IČOSpanish data · Spanish CIFSwedish data · Swedish organisationsnummer
Try it