Ein Adressgenerator für die USA liefert Ihnen vollständige amerikanische Adressen auf Abruf. Jeder Datensatz besteht aus einer Hausnummer, einem Straßennamen, optional einer Einheit, einer Stadt, einem zweibuchstabigen Bundesstaatskürzel und einer fünfstelligen Postleitzahl, die einen vierstelligen Zusatz tragen kann. Was ein brauchbares Werkzeug von einem zufälligen Zeichenkettenbauer unterscheidet, ist die Abstimmung der Felder untereinander: Die Stadt gehört zu dem Bundesstaat, und die Postleitzahl gehört zu beiden.
Dieser Leitfaden zeigt, woraus eine US-Adresse tatsächlich besteht, wie sich Bundesstaaten, der District of Columbia und die Territorien zueinander verhalten, warum die Übereinstimmung von Postleitzahl und Stadt wichtiger ist als die meisten Teams erwarten, und wo die ehrliche Grenze erzeugter Datensätze liegt. Am Ende wissen Sie, welche Adressfehler Ihre Formulare abfangen sollten und welche Ihnen ein Adressgenerator stillschweigend abnimmt.
Woraus besteht eine Adresse in den USA tatsächlich?
Eine amerikanische Adresse wird von der kleinsten zur größten Einheit geschrieben – genau umgekehrt zur Reihenfolge in Japan und mehreren anderen Postsystemen. Am Anfang steht die Empfängerzeile, dann folgen Hausnummer und Straßenname, dann die Einheiten- oder Wohnungsangabe, dann die Stadt, dann das Bundesstaatskürzel und am Ende die Postleitzahl. Wird die Adresse in einer einzigen Zeile notiert, setzt die Standardform Stadt und Bundesstaat zusammen, danach ein Komma und am Schluss die Postleitzahl. Ein Werkzeug, das diese Abfolge einhält, erzeugt ein Etikett, das ein Zusteller korrekt liest. Ein Werkzeug, das die Elemente umsortiert, erzeugt eine Zeile, die fremd wirkt, selbst wenn jeder einzelne Wert darin stimmt.
Das Bundesstaatselement ist immer ein zweibuchstabiges Kürzel und niemals ein ausgeschriebener Name; die Postverwaltung führt diese Liste als festen Satz. Die Postleitzahl besteht aus fünf Ziffern, und seit den späten 1980er Jahren kann nach einem Bindestrich ein optionaler vierstelliger Zusatz folgen, der einen kleineren Zustellbereich bezeichnet. Formulare, die die erweiterte Form annehmen, müssen beide Längen akzeptieren. Ein Datensatz, der immer nur die fünfstellige Variante trägt, übt den längeren Pfad nie aus.
Die Einheitenangabe ist das Feld, das in einem System optional und in einem anderen verpflichtend ist. Eine Wohnung, ein Suite, ein Stockwerk, eine Einheit oder eine Gebäudenummer kann als Wort mit Zahl geschrieben werden, als Rautezeichen mit Zahl oder als reine Zahl in einer zweiten Zeile. Alle diese Formen kommen in echten Daten vor. Ein Parser, der nur die Wortform beherrscht, weist gültige Eingaben zurück.
Das Land am Ende wird in den meisten Datensätzen weggelassen, weil die Standardform der Post innerhalb der USA keines vorsieht. Sobald jedoch ein Datensatz international versandt oder in einer Tabelle neben Adressen anderer Länder gespeichert wird, gehört ein Ländercode hinzu – und die Wahl dieses Codes entscheidet darüber, ob die restliche Prüfkette überhaupt greift.
Wie unterscheiden sich Bundesstaaten, der District of Columbia und die Territorien?
Fünfzig Bundesstaaten, der District of Columbia und die bewohnten Territorien besitzen jeweils eigene zweibuchstabige Kürzel, und sie sind in einem Auswahlfeld nicht austauschbar. Der District of Columbia trägt das Kürzel DC und verhält sich für Adresszwecke wie ein Bundesstaat, ist aber keiner. Systeme, die die erste Ebene der Hierarchie als Bundesstaat modellieren, beschriften ihn in Berichten und Filtern falsch.
Die Territorien sind das leisere Problem. Puerto Rico trägt PR, Guam trägt GU, die United States Virgin Islands tragen VI, American Samoa trägt AS und die Northern Mariana Islands tragen MP. Einige Versand- und Steuersysteme behandeln diese Gebiete als Inlandsziele, andere als Auslandsziele. Ein Formular, das die USA als einziges zulässiges Land fest verdrahtet und gleichzeitig ein Territorialkürzel zulässt, erzeugt damit eine Kombination, die der übrige Stack zurückweist.
Hinzu kommt eine Gruppe freier assoziierter Staaten und kleiner Außengebiete, die in Referenzdatensätzen mit eigenen Kürzeln erscheinen, auf einem Versandetikett aber kaum je auftauchen. Ein Werkzeug, das amerikanische Abdeckung beansprucht, sollte ausdrücklich sagen, ob es nur die fünfzig Bundesstaaten abdeckt, die Bundesstaaten plus DC oder den vollen Satz einschließlich der Territorien. Der Unterschied wird genau dann wichtig, wenn Sie ein Zuständigkeits-Auswahlfeld prüfen und nicht ein Straßenfeld.
Für die Testarbeit folgt daraus eine einfache Regel: Prüfen Sie die Auswahlliste als eigenes Feld. Ein Dropdown, das DC und PR führt, dessen Steuerlogik dahinter aber nur die fünfzig Bundesstaaten kennt, ist eine Fehlerquelle, die erst in der Produktion sichtbar wird. Notieren Sie in den Testfalldaten ausdrücklich, welche Gebietsmenge Sie erwarten, damit ein späterer Wechsel der Liste nicht unbemerkt bleibt.
Warum müssen Postleitzahl, Stadt und Bundesstaat zusammenpassen?
Der häufigste Fehler in handgebauten amerikanischen Adressdaten ist die Unstimmigkeit zwischen der Postleitzahl und dem Ort, zu dem sie gehören soll. Jemand wählt einen plausiblen Stadtnamen, tippt eine plausible fünfstellige Zahl, und die beiden haben nichts miteinander zu tun. Kein Wert sieht für sich betrachtet falsch aus – genau deshalb übersteht der Fehler die Prüfung und landet in einer Fixture.
Die unabhängige Zufallsauswahl verschlimmert das. Wenn Sie eine Stadt aus einer Liste mit tausend Namen ziehen und eine Postleitzahl aus einem Bereich von vierzigtausend Möglichkeiten, ist die Wahrscheinlichkeit, dass das Paar echt ist, verschwindend gering. Dieselbe Fehlerklasse zeigt sich in jedem anderen Land, ob es sich nun um einen türkischen Bezirk im falschen Provinzverbund oder um eine brasilianische Postleitzahl an der falschen Gemeinde handelt.
Die Lösung ist struktureller und nicht redaktioneller Natur. Entscheiden Sie zuerst den Bundesstaat, wählen Sie dann eine Stadt und eine Postleitzahl, die beide dazugehören, und leiten Sie die Telefonvorwahl aus derselben Region ab. Ein Werkzeug, das in dieser Reihenfolge arbeitet, kann kein regionenübergreifendes Paar erzeugen; aus diesem Grund baut der Adressgenerator auf dieser Site jeden Datensatz von einer Region nach unten auf. Die allgemeinere Beziehung zwischen Feldern behandelt der Artikel zur Feldkonsistenz, und er gilt für Adressspalten genauso unmittelbar wie für Identitätsspalten.
Ein zweiter, oft übersehener Punkt ist die Richtung der Beziehung. Aus einer Stadt folgt eindeutig ein Bundesstaat, und aus einer Postleitzahl folgen Stadt und Bundesstaat ebenso eindeutig; aus einer Stadt folgen jedoch nicht eindeutig ihre Postleitzahlen, denn eine große Stadt hat viele. Wer die Zuordnung in der falschen Richtung prüft, also von der Stadt auf genau eine Postleitzahl schließt, baut eine Prüfung, die korrekte Daten zurückweist.
Was bedeutet die Abdeckung hinter einem US-Adressgenerator wirklich?
Abdeckungszahlen lassen sich leicht aufblähen und schwer interpretieren. Deshalb hilft es zu wissen, worauf sich die Angaben beziehen. Auf dieser Site umfasst der amerikanische Datensatz die vollständige Menge der ersten Verwaltungsebene, rund zweihundert besiedelte Orte, knapp unter zweitausend Verwaltungseinheiten darunter und mehr als dreizehntausend Postleitzahlen aus der echten Zuteilung.
Diese Zahlen sind weniger wichtig als die Beziehungen zwischen ihnen. Zweihundert Städte gegenüber mehr als dreizehntausend Postleitzahlen bedeuten, dass ein durchschnittlicher Ort viele Postleitzahlen besitzt. Ein Werkzeug, das die Stadtliste und die Postleitzahlliste unabhängig voneinander beprobt, erzeugt daher weiterhin in den meisten Fällen Paare, die nicht zusammengehören. Die sinnvolle Aussage lautet nicht, wie viele Werte existieren, sondern dass eine gewählte Stadt immer mit einer Postleitzahl kommt, die zu ihr gehört. Ein Werkzeug, das aus zwei beliebigen Listen ein korrektes Paar bilden kann, ist mehr wert als eines mit einer längeren Liste zusammenhangloser Werte, weil nur das erste in einer Zusicherung verwendbar ist, die auch im nächsten Jahr noch hält.
Ebenso sollten Sie wissen, wofür die Ebenen unterhalb der Stadt stehen. In vielen Ländern ist die Zwischenebene die Einheit, an der Postleitzahlen hängen; deshalb sind diese Datensätze hierarchisch organisiert und nicht als flache Listen. Ein Adressformular, das nur Stadt, Bundesstaat und Postleitzahl abfragt, verwirft eine Schicht, die andere Länder verlangen werden. Eine Testsuite, die diese Schicht nie ausübt, deckt den Unterschied nicht auf.
Für die Planung heißt das: Legen Sie vor dem Test fest, welche Ebenen Ihre Anwendung überhaupt kennt, und erzeugen Sie Daten genau auf dieser Tiefe. Ein Datensatz mit einer Verwaltungseinheit, die das Schema gar nicht speichern kann, erzeugt einen Fehler im Testaufbau und nicht im getesteten Code.
Welche Adressfehler sollten Ihre Formulare erkennen?
Erzeugte Daten sind nützlich, um zu bestätigen, dass ein Formular korrekte Eingaben annimmt – noch nützlicher sind sie, um zu bestätigen, dass es inkorrekte Eingaben ablehnt. Die Fehler, für die sich Testfälle lohnen, sind jene, die ein Formular tatsächlich erkennen kann:
- eine Postleitzahl, die zu kurz oder zu lang ist
- ein Bundesstaatskürzel, das nicht auf der Liste steht
- eine Stadt, die nicht zu dem ausgewählten Bundesstaat passt
- eine Einheitenangabe, die länger ist als das Feld erlaubt
- eine Straßenzeile, die die Breite der gespeicherten Spalte überschreitet
Dann gibt es die Fälle, die ein Formular nicht erkennen kann und deshalb auch nicht vorgeben sollte zu erkennen. Eine korrekt formatierte Postleitzahl, die zu einer anderen Stadt gehört als der eingegebenen, lässt sich clientseitig nicht auflösen, und ein Stadtname, der anders geschrieben wird als der amtliche, ebenso wenig. Wer solche Fälle als Validierungsfehler behandelt, erzeugt falsche Zurückweisungen – ein schlechteres Ergebnis als die Annahme eines leicht ungewöhnlichen Datensatzes.
Eine ergiebige Testdatei für Kassenabläufe enthält üblicherweise eine Charge erzeugter US-Adressdatensätze für den Erfolgspfad, eine kleine Menge absichtlich fehlerhafter Werte für den Ablehnungspfad und ein bis zwei Datensätze mit ungewöhnlichen, aber zulässigen Formen: ein Territorialkürzel, eine erweiterte Postleitzahl und ein Straßenname mit Punkt oder Apostroph. Der Artikel zu den Testfällen für Kassenadressformulare listet weitere auf, und der Beitrag zum internationalen Adressformat erklärt, warum dasselbe Feld in einem Land erforderlich und in einem anderen gar nicht vorhanden ist. Wo ein Feld einen Wert zurückweist, sollten Sie sowohl auf die Ablehnung als auch auf die Meldung prüfen: Eine klare Meldung und eine generische scheitern für Nutzer auf sehr unterschiedliche Weise.
Sind erzeugte US-Adressen zustellbar?
Sind sie nicht, und kein ehrliches Werkzeug sollte etwas anderes nahelegen. Eine erzeugte Adresse besitzt die korrekte Struktur und die korrekten internen Beziehungen – genau das braucht ein Formularparser, ein Regelsatz zur Prüfung oder ein Kassenablauf, um ausgeübt zu werden. Sie löst sich jedoch nicht in ein reales Gebäude auf, ist auf niemanden registriert und wird von keinem Zusteller als Ziel akzeptiert.
Diese Unterscheidung verwischt leicht, wenn die Daten gewöhnlich aussehen. Die Hausnummer ist plausibel, der Straßenname ist ein echter Straßenname, der irgendwo im Land verwendet wird, und die Stadt existiert tatsächlich. Die Kombination ist es, was den Datensatz synthetisch macht: Genau dieses Haus in genau dieser Straße entspricht nicht dem Datensatz, der vor Ihnen liegt.
Die praktische Folge ist eine Regel, die in die Datensatznotizen gehört und nicht in einen Kommentar, den niemand liest: Diese Datensätze existieren, um Software zu testen. Sie dürfen nicht für echte Sendungen verwendet werden, und sie dürfen nicht als Wohnort einer Person dargestellt werden. Wenn ein Screenshot von Staging-Daten eine Umgebung verlässt, sollte der Datensatz erkennbar sagen, was er ist.
Ein zweites Risiko liegt in der Weitergabe. Ein Datensatz, der in einer Beispieldatenbank, in einem Ticket oder in einem Chat-Anhang landet, verliert seinen Kontext. Deshalb gehört ein klarer Hinweis in den Datensatz selbst oder mindestens in die Spaltenüberschrift der Datei, aus der er stammt.
Wie sollten Sie das Ergebnis für die spätere Wiederverwendung speichern?
Speichern Sie erzeugte Adressen als Fixtures, sobald sie einen Zweck haben, und bewahren Sie die Erzeugungsparameter daneben auf. Eine Fixture, die den Identitätsschlüssel, das Land und den verwendeten Startwert festhält, lässt sich Jahre später erneut erzeugen – das macht einen alten Regressionstest aussagekräftig statt rätselhaft. Der Artikel zu Adressdaten in Test-Fixtures behandelt die Einzelheiten.
Halten Sie die Adressspalten von allem anderen getrennt. Empfängernamen, interne Notizen, Anbieterangaben und Zustellanweisungen gehören nicht in die Straßenzeile. Eine Vermischung bläht deren Länge auf, bricht Zeichenprüfungen und erzeugt Fehler, die wie Adressprobleme aussehen, während der eigentliche Fehler in einem Schema liegt, das fremden Text durchgelassen hat.
Prüfen Sie schließlich die Beziehungen, statt ihnen zu vertrauen. Ein Test, der kontrolliert, dass die Stadt zum Bundesstaat gehört und die Postleitzahl zum selben Bundesstaat, fängt die meisten handgemachten amerikanischen Adressdaten ab, bevor sie eine gemeinsame Fixture erreichen. Diese eine Zusicherung leistet mehr für die Datenqualität als jede Sorgfalt beim Eintippen von Datensätzen.
Behalten Sie daneben eine weitere Gewohnheit bei. Scheitert ein Datensatz an einer Beziehungsprüfung, reparieren Sie das Werkzeug und nicht den Datensatz. Eine von Hand korrigierte Zeile ist eine Zeile, die beim nächsten Auffrischen der Fixture überschrieben wird. Eine Prüfung, die niemand durch Bearbeiten eines einzelnen Feldes erfüllen kann, ist eine Prüfung, die weiter wirkt.
Jede so erzeugte Adresse ist ein synthetischer Testdatensatz mit korrekter Struktur und korrekten internen Beziehungen, und nichts darüber hinaus. Sie ist kein zustellbarer Ort, sie gehört keiner Person und keiner Organisation, und sie darf nicht verwendet werden, um sich als jemand auszugeben, einen Wohnsitz nachzuweisen, echte Post zu empfangen oder eine Verifizierungsstufe zu umgehen.