Generator · Austrian data

Austrian SVNR

Endpoint GET /v1/at/svnr

What it covers

Returns a valid Austrian SVNR (Sozialversicherungsnummer) with a correct check digit. Constrain with age/birth-date filters (the SVNR encodes a birth date but no sex). Contradictory combinations are rejected with a 400. Set `invalid=true` for a deliberately wrong check digit.

How it’s calculated

The Austrian Sozialversicherungsnummer (SVNR) check digit is a weighted-sum modulo-11 over the other nine positions of the 10-digit number, where the residue 10 is unissued.

Algorithm

  1. An SVNR is 10 digits laid out as S S S C D D M M Y Y: a 3-digit running serial (SSS), the 1-digit check digit (C) in position 4, then the birth date as DD (day, 2 digits), MM (month, 2 digits), YY (2-digit year, i.e. year mod 100).
  2. Assemble the 10-character digit string with a placeholder 0 in the check-digit slot (position 4): concatenate the 3-digit serial + '0' + DD + MM + YY. Example shape: 'SSS' + '0' + 'DDMMYY'.
  3. Fix the per-position weights, one per digit over all ten positions: [3, 7, 9, 0, 5, 8, 4, 2, 1, 6]. The 4th weight is 0, so the check-digit slot never contributes to its own sum, which is why a 0 placeholder is safe there.
  4. Compute the weighted sum: multiply each of the 10 digits by the weight at the same index and add all products together (plain sum, no intermediate modulo).
  5. Take that sum modulo 11.
  6. If the remainder equals 10, this (serial, birth date) combination has no representable single-digit check and is NOT issued — draw a different serial and start over. Otherwise the remainder (0-9) is the check digit C.
  7. Place C into position 4 to form the final SVNR: serial (3 digits) + C + DD + MM + YY.

Worked example

Serial 123, born 1987-06-15 -> SVNR 123?150687 (check digit = ?)

Layout S S S C D D M M Y Y: serial=123, date 1987-06-15 -> DD=15, MM=06, YY=87 (1987 mod 100).
Build the 10-digit string with a 0 placeholder in the check slot: '123' + '0' + '15' + '06' + '87' = '1230150687'.
Digits: [1,2,3,0,1,5,0,6,8,7]; weights: [3,7,9,0,5,8,4,2,1,6].
Products: 1*3=3, 2*7=14, 3*9=27, 0*0=0, 1*5=5, 5*8=40, 0*4=0, 6*2=12, 8*1=8, 7*6=42.
Sum = 3+14+27+0+5+40+0+12+8+42 = 151.
151 mod 11 = 151 - 143 = 8. Not 10, so it is valid; check digit = 8.
Final SVNR = '123' + '8' + '150687' = '1238150687'.

The check digit is 8, giving the full SVNR 1238150687.

Edge cases

  • Residue 10: when the weighted sum mod 11 equals 10 there is no single-digit check, so that serial is unissued and buildSvnrFromDate redraws a new serial (computeSvnrCheckDigit returns undefined).
  • Serial first digit is drawn non-zero (nextInt(1,9)*100 + nextInt(0,99)), so the canonical serial is 100-999 and the SVNR never has a leading-zero serial.
  • Encodable birth-date band is 1900-01-01 through 2099-12-31, because the year is stored as only 2 digits (year mod 100).

Gotchas

  • The check digit occupies position 4 (index 3), between the serial and the date — it is NOT a trailing digit. Its own weight is 0, so the sum is computed with a 0 placeholder in that slot.
  • The scheme uses the raw remainder (sum mod 11) directly as the check digit, not the 11-complement. There is no '11 - r' step.
  • weightedSum returns the plain (un-moduloed) sum; the % 11 is applied by the generator after, and only the final result is taken mod 11.
  • YY is year mod 100, so the check digit alone cannot distinguish a 1987 birth from a 2087 birth.

Parameters

ParameterTypeDescription
atAgeintegerExact age in years at request time.
bornAfterstringpattern ^\d{4}(?:-\d{2}(?:-\d{2})?)?$Born after this date or fragment (YYYY, YYYY-MM, YYYY-MM-DD).
bornBeforestringpattern ^\d{4}(?:-\d{2}(?:-\d{2})?)?$Born before this date or fragment (YYYY, YYYY-MM, YYYY-MM-DD).
bornOnstringpattern ^\d{4}(?:-\d{2}(?:-\d{2})?)?$Born on a date or within a fragment: YYYY, YYYY-MM, or YYYY-MM-DD.
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 edge-case values.
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 an SVNR with a deliberately wrong check digit; the birth date stays valid.
olderThanintegerMinimum age in years at request time.
seedintegerInteger seed for reproducible output: the same seed always yields the same record.
youngerThanintegerMaximum age in years at request time.

Response fields

FieldTypeDescription
valuestringThe bare 10-digit SVNR.
digitsstringThe canonical 10-digit SVNR.
birthDatestringThe encoded birth date, ISO `YYYY-MM-DD`.

Other generators for Austria

See all generators for Austria →

The same kind of identifier elsewhere

Try it

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