Skip to content

Instantly share code, notes, and snippets.

@jensens jensens/svnr_validate.py
Last active Mar 23, 2017

Embed
What would you like to do?
Calculate the check digit of an Austrian social insurance number; Berechnen der Prüfziffer einer österreichischen Sozialversicherungsnummer
# -*- coding: utf-8 -*-
"""Calculate the check digit of an Austrian social insurance number
Berechnen der Prüfziffer einer österreichischen Sozialversicherungsnummer
copyright Klein & Partner KG.
License: Gnu Public License 2.0
from https://de.wikipedia.org/wiki/Sozialversicherungsnummer#.C3.96sterreich
Die Prüfziffer kann wie folgt errechnet werden:
Jede einzelne Ziffer der Versicherungsnummer wird mit einer bestimmten Zahl
multipliziert:
Laufnummer mit 3, 7, 9
Geburtsdatum mit 5, 8, 4, 2, 1, 6
Die Prüfziffer errechnet sich aus dem Divisionsrest der Summe der
einzelnen Produkte geteilt durch 11.
Wenn der Divisionsrest 10 ergibt, so wird die Laufnummer um 1 erhöht und eine
neue Berechnung durchgeführt.
Beispiel:
123X 010180
X=(1×3 + 2×7 + 3×9 + 0×5 + 1×8 + 0×4 + 1×2 + 8×1 + 0×6) mod 11
X=7
Die Sozialversicherungsnummer lautet somit 1237 010180.
"""
MULT = [3, 7, 9, 0, 5, 8, 4, 2, 1, 6]
MULT.reverse()
def _checkdigit(svnr):
"""calculate the checkdigit of a svnr
"""
def zx(p):
"""calculate a single checkdigit given the position ``p``
"""
return ((svnr % 10**(p + 1) - svnr % 10**p) / 10**p) * MULT[p]
return sum(map(zx, range(0, 10))) % 11
def svnr_checkdigit(svnr):
laufnr = s / (10**7)
datepart = svnr - laufnr * (10**7)
checkdigit = _checkdigit(svnr)
while checkdigit == 10:
# in case of 10 a rule is to increase the laufnummer
# and check again
laufnr += 1
svnr = laufnr * 10**7 + datepart
checkdigit = _checkdigit(svnr)
return checkdigit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.