Skip to content

Instantly share code, notes, and snippets.

@heyalexej
Created July 14, 2026 13:31
Show Gist options
  • Select an option

  • Save heyalexej/be04332d59e405a448213b8cdac17c1c to your computer and use it in GitHub Desktop.

Select an option

Save heyalexej/be04332d59e405a448213b8cdac17c1c to your computer and use it in GitHub Desktop.
Prüfziffern-Validierung für die Unternehmensnummer (UNR.S) der gesetzlichen Unfallversicherung nach DGUV-Verfahrensbeschreibung
"""Prüft die Prüfziffer einer Unternehmensnummer (UNR.S) der gesetzlichen Unfallversicherung.
Aufbau (15 Stellen): Stellen 1-11 Unternehmernummer, Stelle 12 Prüfziffer,
Stellen 13-15 Unternehmenskennzeichen (nicht "000").
Algorithmus laut DGUV-Verfahrensbeschreibung UV-Meldeverfahren:
Stellen 1-11 mit den Faktoren 4, 9, 4, 9, ... multiplizieren, Produkte
aufsummieren, Prüfziffer = 10 - (Summe mod 10); ergibt das 10, ist sie 0.
Quelle: https://www.dguv.de/medien/inhalt/versicherung/uv-meldeverfahren/verfahrensbeschreibung_neu/verfahrensbeschreibung_2-1/verfahrensbeschreibung-ln_2_1.pdf
"""
import sys
FAKTOREN = [4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4]
def pruefziffer(unr_stellen_1_bis_11: str) -> int:
summe = sum(int(z) * f for z, f in zip(unr_stellen_1_bis_11, FAKTOREN))
return (10 - summe % 10) % 10
def pruefe_unrs(unrs: str) -> tuple[bool, str]:
unrs = unrs.replace(" ", "")
if len(unrs) != 15 or not unrs.isdigit():
return False, "UNR.S muss aus genau 15 Ziffern bestehen"
if unrs[12:] == "000":
return False, "Unternehmenskennzeichen (Stellen 13-15) darf nicht 000 sein"
erwartet = pruefziffer(unrs[:11])
ist = int(unrs[11])
if ist != erwartet:
return False, f"Prüfziffer falsch: Stelle 12 ist {ist}, erwartet {erwartet}"
return True, "gültig"
# Synthetische Beispielnummern (keine real vergebenen UNR.S):
# Stellen 1-11 = 12345678901, Summe der Produkte = 284, Prüfziffer = 6
BEISPIEL_GUELTIG = "123456789016001"
BEISPIEL_UNGUELTIG = "123456789017001" # Prüfziffer absichtlich falsch (7 statt 6)
def _selbsttest() -> None:
assert pruefe_unrs(BEISPIEL_GUELTIG) == (True, "gültig")
ok, meldung = pruefe_unrs(BEISPIEL_UNGUELTIG)
assert not ok and "Prüfziffer falsch" in meldung
assert not pruefe_unrs("123456789016000")[0] # Kennzeichen 000 unzulässig
assert not pruefe_unrs("12345")[0] # falsche Länge
print("Selbsttest OK")
if __name__ == "__main__":
if len(sys.argv) > 1:
nummer = sys.argv[1]
ok, meldung = pruefe_unrs(nummer)
print(f"UNR.S {nummer}: {meldung}")
sys.exit(0 if ok else 1)
_selbsttest()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment