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
- 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).
- 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'.
- 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.
- 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).
- Take that sum modulo 11.
- 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.
- 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
| Parameter | Type | Description |
|---|---|---|
| atAge | integer | Exact age in years at request time. |
| bornAfter | stringpattern ^\d{4}(?:-\d{2}(?:-\d{2})?)?$ | Born after this date or fragment (YYYY, YYYY-MM, YYYY-MM-DD). |
| bornBefore | stringpattern ^\d{4}(?:-\d{2}(?:-\d{2})?)?$ | Born before this date or fragment (YYYY, YYYY-MM, YYYY-MM-DD). |
| bornOn | stringpattern ^\d{4}(?:-\d{2}(?:-\d{2})?)?$ | Born on a date or within a fragment: YYYY, YYYY-MM, or YYYY-MM-DD. |
| 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 edge-case values. |
| 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 an SVNR with a deliberately wrong check digit; the birth date stays valid. |
| olderThan | integer | Minimum age in years at request time. |
| seed | integer | Integer seed for reproducible output: the same seed always yields the same record. |
| youngerThan | integer | Maximum age in years at request time. |
Response fields
| Field | Type | Description |
|---|---|---|
| value | string | The bare 10-digit SVNR. |
| digits | string | The canonical 10-digit SVNR. |
| birthDate | string | The encoded birth date, ISO `YYYY-MM-DD`. |
Other generators for Austria
Austrian companyAustrian company nameAustrian email addressAustrian FirmenbuchnummerAustrian IBANAustrian personAustrian person nameAustrian product or service offeringAustrian SteuernummerAustrian UIDAustrian vehicle registration plate
See all generators for Austria →The same kind of identifier elsewhere
Belgian 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 NIRGerman data · German Steuer-IdNrGreek 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