Menü

CPF und CNPJ Prüfung: die zwei brasilianischen Steuernummern

Die CPF und CNPJ Prüfung betrifft zwei brasilianische Steuernummern — eine für natürliche Personen, eine für juristische — und beide schließen mit zwei Prüfziffern statt einer.

Veröffentlicht am

  • Validierung
  • Prüfziffer
  • Steuernummer

Brasilianische Steuernummern kommen in zwei Formen, und sie auseinanderzuhalten ist der erste Schritt jeder Prüfung. Die CPF identifiziert eine natürliche Person, die CNPJ eine juristische Person. Beide schließen mit zwei Prüfziffern statt mit einer, wodurch eine etwas ehrgeizigere Arithmetik eine breitere Klasse von Tippfehlern fängt.

Das Paar eignet sich gut als Fallstudie, weil die Nummern kurz genug sind, um sie von Hand zu prüfen, weil ihre Regeln lange genug veröffentlicht sind, um überall nachlesbar zu sein, und weil sie sich stark genug unterscheiden, dass eine einzige nachlässige Routine mindestens eine der beiden falsch behandelt. Hier steht, wie sie aufgebaut sind und was ein Prüfer ehrlicherweise über sie sagen kann.

Was sind CPF und CNPJ?

Die CPF ist das Steuerregister natürlicher Personen, die Nummer also, nach der an einem Bankschalter, an einer Hotelrezeption oder an einer Kasse im Netz gefragt wird. Die CNPJ ist das Steuerregister juristischer Personen, die Nummer, die auf jeder Rechnung und jeder Visitenkarte eines Unternehmens steht. Die eine gehört zu einer Person, die andere zu einer Organisation, und die Register dahinter sind getrennt.

Weil sie parallele Rollen spielen, werden beide Zeichenketten oft zusammen besprochen und zusammen umgesetzt, und das gemeinsame Vokabular verdeckt, dass ihre inneren Gliederungen nicht dieselben sind. Wer über die eine liest und annimmt, die andere funktioniere gleich, baut eine Routine, die gültige Werte etwa die Hälfte der Zeit zurückweist.

Die Beispielzeichenketten in diesem Beitrag sind synthetische Illustrationen, die nur zeigen, wie sich die beiden Nummern verhalten. Kein echtes Register einer Person oder eines Unternehmens wird hier wiedergegeben oder nachgebildet, und eine Illustration durch die Prüfung zu schicken sagt nichts über irgendjemanden aus.

Wie unterscheiden sich die beiden Nummern in ihrer Form?

Der offensichtliche Unterschied ist, dass die Nummer der juristischen Person die längere von beiden ist, was aus dem größeren Register und seinen inneren Unterteilungen folgt. Die Nummer der natürlichen Person ist die kompaktere Form, zugeschnitten auf eine einzelne Person ohne Niederlassungen.

Der strukturelle Unterschied wiegt schwerer als die Länge. Das Format der juristischen Person setzt sich aus Teilen zusammen, die die Registrierung des Unternehmens auf mehr als einer Ebene kennzeichnen; seine inneren Felder sind deshalb kein homogener Ziffernblock. Das Format der natürlichen Person ist im Wesentlichen flach: ein laufender Rumpf, eine Regionskennung und die zwei Prüfziffern.

Keines der beiden Formate sollte beschrieben werden, indem man seine genauen Positionen in Prosa aufsagt. Die veröffentlichten Regeln sind die Quelle der Wahrheit, und eine in eine Wiki-Seite kopierte Tabelle altert schlecht. Behandeln Sie die Gliederung als Daten, die der Code liest, und nicht als Wissen, das über Kommentare in drei Dateien verteilt liegt.

Die Idee der Prüfziffer: gewichtete Summe, dann Modul

Beide Formate leiten ihre letzten Ziffern mit derselben Arithmetikfamilie ab, zweimal angewendet. Jede der letzten beiden Positionen wird aus den Ziffern davor berechnet: Jede Ziffer wird mit einem von ihrer Position abhängigen Gewicht multipliziert, die Produkte werden addiert, die Summe wird durch einen Modul geteilt, und der Rest wird über eine veröffentlichte Zuordnung in eine Prüfziffer verwandelt.

Die zweite Ziffer wird nach der ersten berechnet, und ihre Rechnung führt die erste Ziffer unter ihren Eingaben. Diese Verkettung ist der Grund, warum die beiden nicht unabhängig geprüft werden können: Wer die Rechnung der zweiten Ziffer ändert, ohne die erste einzuspeisen, erzeugt Werte, die für sich genommen richtig aussehen und in Kombination scheitern.

Die Familie ist die modulbasierte, die der Beitrag über Prüfziffernverfahren vorstellt, und der Schritt der Zuordnung ist die Stelle, an der naive Umsetzungen abdriften. Wenn die Division einen Rest übrig lässt, der sich nicht unmittelbar in eine einzelne Ziffer übersetzen lässt, sagt die veröffentlichte Regel, was damit zu geschehen hat; eine Routine, die diesen Schritt auslässt, widerspricht der Norm bei einer kleinen, aber reproduzierbaren Teilmenge von Eingaben.

Warum sind Folgen mit lauter gleichen Ziffern ausgeschlossen?

Wiederholte Ziffern sind das klassische Gegenbeispiel gegen jede modulare Prüfung. Eine Zeichenkette aus einem einzigen wiederholten Zeichen unterläuft einfache Arithmetik, weil Gewichte und wiederholte Werte so zusammenwirken, dass die Summe unverändert bleibt und die Prüfziffer passend herauskommt. Die veröffentlichten Regeln schließen solche Zeichenketten deshalb ausdrücklich aus, statt sich auf die Arithmetik zu verlassen.

Dieser Ausschluss ist keine Einschränkung des Verfahrens, sondern die bewusste Feststellung, dass eine Registriernummer dieser Form nie ausgegeben wird. Ein Prüfer, der die Arithmetik umsetzt, den Ausschluss aber überspringt, akzeptiert einen Wert, den das Register selbst nie erzeugt hätte — genau die Lücke, durch die Platzhaltertext ein Formular passiert.

Dieselbe Überlegung lohnt sich allgemein. Wann immer ein Schema eine Ausnahme definiert, gehört diese Ausnahme zur Regel und ist kein optionaler Zusatz, und der richtige Ort für ihre Umsetzung ist neben der Arithmetik und nicht bei der aufrufenden Stelle.

Formatprüfung und Registerstatus sind zwei verschiedene Dinge

Eine bestandene Prüfung heißt, dass die zwei letzten Ziffern mit dem Rumpf übereinstimmen. Mehr nicht. Ob die Nummer je ausgegeben wurde, ob sie noch aktiv ist, ob sie zu der Person gehört, die sie eintippt — all das liegt im Register der Steuerbehörde, das eine Offline-Routine nicht sieht.

Das Register ist zudem die falsche Adresse für einen beiläufigen Blick. Jemandes Steuerstatus abzufragen ist eine andere Tätigkeit als festzustellen, dass eine Zeichenkette wohlgeformt ist, und sie hat rechtliche und datenschutzrechtliche Folgen, die eine Formularprüfung nie hat. Die Arithmetik lokal zu bauen und das Register als getrennte, bewusste Anbindung zu behandeln, hält diese beiden Anliegen auseinander.

Die Formulierung von Fehlern muss diese Unterscheidung tragen. Wer erfährt, die eigene Nummer sei ungültig, könnte schließen, mit der Registrierung stimme etwas nicht, obwohl in Wahrheit nur die Zeichenkette an der Arithmetik gescheitert ist. Die Meldung sollte sagen, dass die Ziffern nicht zusammenpassen, und den Zustand der Registrierung aus dem Spiel lassen.

Für Entwickler: Bereinigen, Maskieren und Fehlermeldungen

Ein paar Gewohnheiten halten dieses Paar von Schemata aus Schwierigkeiten heraus.

  • Normalisieren Sie für beide gleich: Darstellungszeichen entfernen, Ziffern behalten, und bedenken Sie, dass Bereinigen keine Reparatur ist.
  • Bestimmen Sie das Schema aus dem Kontext, nicht durch Raten. Fragen Sie die aufrufende Stelle, welche Art Steuerzahler das Feld erwartet, statt es allein aus der Länge zu schließen.
  • Melden Sie, welche der beiden Ziffern gescheitert ist oder ob beide es sind, denn die Lage des Fehlschlags zeigt, wo der Tippfehler sitzt.
  • Schreiben Sie niemals einen vollständigen Wert in die Telemetrie der Produktion. Halten Sie das Urteil und eine maskierte Form fest.

Dieselbe Sorgfalt gilt für die Menschen, die die Nummern lesen, statt für den Code. Eine maskierte Form behält genug führende Zeichen, um für die Eigentümerin erkennbar zu sein, und lässt genug abschließende weg, um für alle anderen nutzlos zu sein. Die Erörterung der Prüfregeln für Ausweisnummern nach Land ist eine nützliche Begleitung, wenn ein Produkt mehrere Rechtsordnungen gleichzeitig bedient. Nimmt Ihr Produkt zusätzlich länderübergreifende Kontokennungen an, zeigt IBAN und mod-97, wie eine zweite, unabhängige Prüfung in einer einzigen Zeichenkette mitreist.

Nächste Schritte

Notieren Sie, welches der beiden Schemata jedes Feld in Ihrem Produkt aufnehmen soll, und testen Sie Ihre Routine dann mit einem Wert, dessen Rumpf zulässig ist und dessen letzte Ziffern es nicht sind. Das Werkzeug zur Nummernprüfung zeigt, wie ein Prüfer dieses Ergebnis beschreiben sollte, und die Prüfregeln für Ausweisnummern ordnen das Paar in den weiteren Zusammenhang von Nummernsystemen ein, die ohne Kenntnis voneinander entworfen wurden.

Weiterlesen

Artikel zu Prüfer für Kreditkarten- und SSN-Nummern