Eine Steuer-ID Prüfung ist die Tätigkeit, eine Steuerkennung zu kontrollieren, bevor sie gespeichert, abgerechnet oder gemeldet wird – und sie ist zugleich das Feld, an das die höchsten Erwartungen gestellt werden. Eine gut gebaute Prüfung verhindert, dass vertauschte Ziffern in Ihre Datenbank gelangen. Sie sagt Ihnen nicht, ob das Unternehmen existiert, ob die Nummer jemals ausgegeben wurde oder ob die dahinterstehende Gesellschaft zu irgendetwas berechtigt ist.
Dieser Artikel erklärt, was eine Steuerkennung ist, warum manche Formate rechnerisch geprüft werden können und andere nicht, wie man die Prüfung schichtet, damit jede Schicht eine Frage beantwortet, die sie tatsächlich beantworten kann, und warum ein gescheiterter Test niemals als fehlendes Unternehmen gemeldet werden darf.
Was ist eine Steuerkennung?
Sie ist die Kennung, die eine Steuerverwaltung einem Steuerpflichtigen zuweist. Das ist die ganze Definition, und sie ist bewusst weit gefasst, weil Länder die steuerliche Erfassung sehr unterschiedlich organisieren.
Ein Land kann eine einzige nationale Steuernummer für alles führen. Ein anderes kann getrennte Nummern für verschiedene Steuerarten haben, sodass ein Unternehmen eine Kennung für direkte Steuern und eine andere für die Umsatzsteuer führt. Ein weiteres kann eine Nummer verwenden, die älter ist als das Steuersystem selbst, weil sie für einen anderen Verwaltungszweck eingeführt und später für die Steuer übernommen wurde. Manche Jurisdiktionen nutzen eine Kennung, die zugleich die Handelsregisternummer ist; andere halten beides streng getrennt.
Daraus folgen unmittelbar zwei Konsequenzen. Erstens ist die Steuernummer in Wirklichkeit kein einzelnes Feld, sondern eine Familie von Feldern, deren Mitglieder vom Land abhängen. Zweitens ist jede Aussage der Form, eine Steuernummer enthalte immer ein bestimmtes Merkmal, irgendwo falsch, weshalb Ihre Prüfung defensiv geschrieben sein muss.
Warum tragen manche Steuernummern eine Prüfziffer?
Weil die ausgebende Stelle sie so entworfen hat. Eine Prüfziffer ist eine arithmetische Redundanz: Das letzte Zeichen, oder eines in der Mitte, wird nach einer veröffentlichten Regel aus den übrigen berechnet, sodass ein einzelner vertippter oder vertauschter Buchstabe meist einen Wert erzeugt, der die Regel verletzt.
Wo ein Land eine solche Regel veröffentlicht, ist ihre Umsetzung wirklich nützlich. Sie fängt die häufigsten Eingabefehler im Moment der Eingabe ab, ohne Netzaufruf, ohne externe Abhängigkeit und ohne Datenschutzfrage. Sie ist günstig, schnell und deterministisch – und sie ist die stärkste Prüfung, die Sie lokal durchführen können.
Wo ein Land keine solche Regel veröffentlicht, ist die Kennung schlicht eine Zuteilung: Die Stelle hat sie vergeben und festgehalten, und keine Arithmetik kann eine echte von einer erfundenen unterscheiden. Das ist häufiger, als Entwickler erwarten. Manche sehr große Jurisdiktionen vergeben schlicht fortlaufende Nummern ohne jede Redundanz.
Die daraus folgende Anweisung ist unmissverständlich. Implementieren Sie einen Prüfziffernalgorithmus nur für die konkreten Länder, in denen Sie verifiziert haben, dass der Algorithmus veröffentlicht und noch aktuell ist. Raten Sie keinen Algorithmus aus der Gestalt der Nummer, und nehmen Sie nicht an, dass dieselbe Regel gilt, weil das Format eines Landes dem eines anderen ähnlich sieht.
| Wie die Nummer aussieht | Was Sie ehrlich prüfen können |
|---|---|
| Veröffentlichter Algorithmus mit Prüfziffer | Zeichensatz, Länge und die Rechenregel |
| Schlichte Zuteilung ohne veröffentlichte Regel | Nur Zeichensatz und eine großzügige Längenobergrenze |
| Format mit Länder- oder Behördenpräfix | Dass das Präfix zum angegebenen Land passt |
| Format, das zugleich als Registernummer dient | Was auch immer das Register selbst bestätigen kann |
Bedeutet eine bestandene Prüfung, dass die Nummer echt ist?
Nein. Formatgültigkeit und Existenz sind verschiedene Eigenschaften, und ihre Vermischung ist der häufigste Entwurfsfehler in diesem Bereich.
Eine syntaktisch einwandfreie Nummer kann niemandem gehören. Wer das Muster versteht, kann eine erzeugen, die jede lokale Regel erfüllt, einschließlich der Prüfziffer, denn die Prüfziffer soll Unfälle abfangen und keine Gegner. Umgekehrt kann eine Nummer vollkommen echt sein und an Ihrer lokalen Regel scheitern, wenn die Regel gegen ein älteres Layout, ein anderes Land oder ein Dokument geschrieben wurde, das die Nummer ungewöhnlich formatiert hatte.
Die Existenz stellt nur die Stelle fest, die die Kennung ausgegeben hat. Wo eine Steuerverwaltung einen amtlichen Auskunftsdienst veröffentlicht, ist dieser Dienst die Antwort auf die Existenzfrage; wo sie das nicht tut, lässt sich Existenz möglicherweise nur aus Dokumenten bestätigen, die das Unternehmen vorlegt. Das ist eine deutlich schwächere Zusicherung und sollte auch so bezeichnet werden, statt als Prüfung verkleidet zu werden.
Es gibt außerdem eine Feinheit, die Teams überrascht: Auch eine bestätigte Registrierung ist eine Momentaufnahme. Eine Nummer kann heute gültig und im nächsten Monat widerrufen sein, ein aggressiver Zwischenspeicher für gültige Nummern gerät also irgendwann mit der Wirklichkeit in Konflikt. Speichern Sie bewusst zwischen, und bevorzugen Sie es, die Antwort mit Zeitstempel zu halten statt für immer.
Wie sollte die Prüfung geschichtet werden?
In drei Durchgängen, geordnet nach Kosten, wobei der günstigste und sicherste zuerst läuft.
Der erste Durchgang ist lokal und strukturell: Ist das Feld gefüllt, liegt es innerhalb einer großzügigen Höchstlänge, enthält es nur Zeichen, die in irgendeinem Format vorkommen, und passt die Länderangabe zu einem vorhandenen Präfix. Dieser Durchgang sollte eine plausible Eingabe fast nie abweisen; seine Aufgabe ist es, leere und offensichtlich beschädigte Werte abzufangen.
Der zweite Durchgang ist länderspezifisch: Wenden Sie die veröffentlichte Prüfziffernregel an, wo Sie eine haben, und nur dort. Melden Sie das Ergebnis als Tippfehlerwarnung am Feld, formuliert als Bitte, den Wert noch einmal anzusehen, denn genau das bedeutet ein Scheitern der Prüfziffer.
Der dritte Durchgang ist die amtliche Abfrage, asynchron und niemals blockierend für das Formular. Sie hat drei unterscheidungswürdige Ausgänge – bestätigt, nicht gefunden und nicht verfügbar – und sollte sagen können, welcher eingetreten ist. Eine Abfrage, die nicht unterscheiden kann, ob es die Nummer nicht gibt oder ob der Dienst ausgefallen ist, wird irgendwann an einem schlechten Netzwerktag einen legitimen Kunden abweisen.
Für Entwickler: Fehler, Zwischenspeicher und Prüfpfade
Die Entwurfsarbeit dreht sich überwiegend um Ehrlichkeit in der Fehlerbehandlung. Jede Schicht sollte ein unterscheidbares Ergebnis liefern, und die Meldung an den Nutzer sollte die Schicht benennen, die gescheitert ist. Ein Hinweis, dass die Steuerverwaltung nicht erreichbar war, die Angaben gespeichert sind und später erneut geprüft wird, ist brauchbar. Die Meldung, die Steuernummer sei ungültig, angehängt an einen Wert, den der Nutzer von einer amtlichen Bescheinigung abgeschrieben hat, ist es nicht.
Denken Sie an einen ausdrücklichen Ergebnistyp statt an einen Wahrheitswert. Vier Zustände – unbestätigt, Gestalt gültig, Abfrage bestätigt, Abfrage nicht gefunden – decken das Feld ab, ohne eine Unterscheidung zu erzwingen, die das System nicht treffen kann. Ein Wahrheitswert faltet sie zusammen und garantiert, dass irgendwann ein legitimer Wert als falsch behandelt wird.
Der Zwischenspeicher sollte asymmetrisch arbeiten. Ein bestätigtes Ergebnis lohnt sich für einen sinnvollen Zeitraum; ein nicht gefundenes Ergebnis sollte schnell verfallen, weil sich Registrierungen ändern und die gestrige Abwesenheit ein schlechter Grund ist, den heutigen Kunden abzulehnen. Ein nicht verfügbares Ergebnis sollte gar nicht als negatives Ergebnis gespeichert werden.
Protokollieren Sie, was Sie geprüft haben, ohne das Protokoll zu einer Kopie der Kundendatenbank zu machen. Halten Sie Tatsache und Zeitpunkt einer Prüfung, die angewandte Schicht und das Ergebnis fest; vermeiden Sie es, die rohe Kennung in Systeme zu duplizieren, die sie nicht brauchen. Muss die Kennung aufbewahrt werden, behandeln Sie sie als Geschäftsdaten mit derselben Sorgfalt wie jede andere – und halten Sie erzeugte Werte klar von echten getrennt, wofür die synthetischen Steuerkennungsfelder dieser Seite gedacht sind. Der Artikel zu den Umsatzsteuernummern behandelt das häufigste Mitglied dieser Familie, und der Beitrag zu den Testunternehmensdaten zeigt, wie der Rest eines synthetischen Geschäftsdatensatzes aussieht.
Nächste Schritte
Erfassen Sie jede Steuernummernprüfung in Ihrem Produkt und beschriften Sie jede damit, welche Schicht sie umsetzt. Jede Prüfung, die einen Wert aufgrund eines geratenen Musters abweist, gehört zu einer Warnung herabgestuft, und jede Meldung, die aufgrund eines Rechentests behauptet, etwas existiere nicht, gehört umgeschrieben auf das, was tatsächlich getestet wurde. Erzeugen Sie dann mit dem Unternehmensdaten-Generator Datensätze für mehrere Länder und bestätigen Sie, dass Ihr Formular ein Land, über das es nichts weiß, verarbeitet, ohne die Eingabe rundheraus abzulehnen.