Eine sehr spezielle (daher auch der unübliche Name) Prozedur, die Adressen innerhalb des Landes Deutschland auf postalische Korrektheit überprüft.
Vorraussetzung ist, daß die Datenbank „dstorechecks“ installiert ist und folgende Tabellen vorhanden (und entsprechend gefüllt) sind :
ORT_DA
PLZ_DA
SOUNDEX_ORTE
SOUNDEX_STRASSEN
STRA_DB
Die Tabellen „ORT_DA“, „PLZ_DA“ und „STRA_DB“ können durch entsprechende Installation von der „Frachtleitdaten“-CD der Deutschen Post eingerichtet werden. Die beiden „SOUNDEX…“-Tabellen werden durch den Aufruf von pm_GenerateSoundex_Ad gefüllt.
So funktioniert der Adreß-Check:
Zunächst wird überprüft, ob der Ort und die Postleitzahl (→ „Ort“, „PLZ“) zusammenpassen, d.h. ob eine sogenannte „AlOrt-Nummer“ ermittelt werden konnte. Ist dies der Fall, so geht es weiter zur Straßensuche.
Konnte keine „AlOrt-Nummer“ ermittelt werden, kann mit Hilfe des Parameters „OrtVorPLZ“ bestimmt werden, ob man davon
ausgeht, daß der Ort (→ „Ort“) bekannt ist (d.h. bis auf Rechstschreibfehler und Groß-/Kleinschreibung und kleine Abweichungen von der postalischen Schreibweise) eingegeben wurde („OrtVorPLZ = 1“, dies ist der Default-Wert), oder daß die Postleitzahl (→ „PLZ“) richtig eingegeben wurde („OrtVorPLZ = 0“) und nun als Ort einfach der zu der PLZ gehörende Ort gewählt wird.
Wird der Ort als bekannt vorausgesetzt, wird jetzt die passende Postleitzahl gesucht.
Bei der Straßensuche wird im Fall „StrasseVorPLZ“ bei erfolgloser Suche zunächst die „soundex“-Funktion angewendet, die
„ähnlich ausgesprochene“ Wörter erkennt; kann auch dadurch keine Straße gefunden werden, wird versucht, wenigstens alle
Straßen zu finden, die in den ERSTEN DREI BUCHSTABEN übereinstimmen.
Anmerkungen :
1. Der Hausnummernzusatz ist für den Adressen-Check irrelevant, DARF aber in „Hausnummer“ enthalten sein (es werden dann nur die ersten Zeichen berücksichtigt, solange es Zahlen sind - sobald ein Zeichen ungleich „0“, „1“, … „9“ kommt, wird der Rest verworfen)
2. Die Prozedur läßt nur Adressen zu, deren Auslieferungs_Status („PLZ_ART_AUSLIEFERUNG“) gleich „6“ oder „7“ ist, was bedeutet, daß die Auslieferung „direkt zur Haustür“ geht. Es kann also z.B. folgender Fall auftreten : In der Rückgabemenge enthalten „PLZ_Status“ und „Ort_Status“ den Wert „0“ oder „1“ (also „OK“ oder „möglicher Wert“), und die anderen Status-Felder enthalten die „3“ („noch nicht überprüft“), aber trotzdem wird „CorrectAdress = 2“ zurückgegeben. Dies ist eben dann der Fall, wenn Ort und PLZ zwar korrekt (oder möglich) sind, aber der Status „PLZ_ART_AUSLIEFERUNG“ NICHT den Wert „6“ oder „7“ hat, d.h. die Post die Ware nicht direkt bis zur Haustür liefern kann.
HTTP-Method | POST |
HTTP-Auth | Optional |
Tags | |
Engine-Kategorie | person management |
Engine-Typ | Daten-Ermittlung |
Letzte Aktualisierung | 6.0.0 (2010-03-26) |
Name 1) | Standard-Wert | Beschreibung 2) | SQL-Datentyp3) | ab Version |
---|---|---|---|---|
PLZ | Zu prüfende Postleitzahl | varchar(5) | 3.5.0 | |
Ort | Zugehöriger Ortsname | varchar(50) | 3.5.0 | |
Strasse | Name der Strasse | varchar(60) | 3.5.0 | |
Hausnummer | Hausnummer (Hausnummer-Zusatz darf enthalten sein, ist aber für die Überprüfung irrelevant) | varchar(10) | 3.5.0 | |
ReturnResult | 1 | „0“ : Ausgabe erfolgt NUR durch den Rückgabeparamter „CorrectAdress“ „1“ : Es gibt ZUSÄTZLICH eine Rückgabemenge | bit | 3.5.0 |
OrtVorPLZ | 1 | „0“ : Bei Differenzen zwischen PLZ und Ort wird die PLZ als richtig angenommen „1“ : Der Ort ist mit einer höhrern Wahrscheinlichkeit richtig als die PLZ | bit | 3.5.0 |
StrasseVorPLZ | 0 | „0“ : Bei in PLZ-Gebiete aufgeteilten Orten ist die PLZ eher richtig als die Straße „1“ : Die Angabe der Straße ist eher richtig als die Angabe der der PLZ | bit | 3.5.0 |
Spaltenname | Beschreibung | SQL-Datentyp4) | ab Version |
---|---|---|---|
PLZ | PLZ der gefundenen Adresse | varchar(5) | 3.5.0 |
PLZ_Status | Status der Überprüfung für die „PLZ“ Mögliche Werte: 0 : OK 1 : möglicher Wert 2 : falscher Wert 3 : noch nicht überprüft | tinyint | 3.5.0 |
Ort | Ort der Adresse | varchar(50) | 3.5.0 |
Ort_Status | Status der Überprüfung für den „Ort“ Mögliche Werte: 0 : OK 1 : möglicher Wert 2 : falscher Wert 3 : noch nicht überprüft | tinyint | 3.5.0 |
OrtZusatz | evtl. Zusatz zum Ortsnamen | varchar(30) | 3.5.0 |
Strasse | Strasse der gültigen Adresse | varchar(60) | 3.5.0 |
Strasse_Status | Status der Überprüfung für die „Strasse“ Mögliche Werte: 0 : OK 1 : möglicher Wert 2 : falscher Wert 3 : noch nicht überprüft | tinyint | 3.5.0 |
Hausnummer | Hausnummer der gefundenen Adresse | varchar(10) | 3.5.0 |
Hausnummer_Status | Status der Überprüfung für die „Hausnummer“ Mögliche Werte: 0 : OK 1 : möglicher Wert 2 : falscher Wert 3 : noch nicht überprüft | tinyint | 3.5.0 |
CorrectAdress |
„0“ : Die Angaben sind korrekt „1“ : Fehlerhafte Angaben, es wurde aber EINE richtige Adresse gefunden „2“ : Fehlerhafte Angaben, es wurde(n) KEINE oder MEHRERE korrekte Adresse(n) gefunden|
Code | Beschreibung | Quelle 5) |
---|---|---|
-500 | Falsche Parameter | nur indirekt |
Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.
6.0.0 | 2010-03-26 | Neu-Kodierung und Verlagerung des Codes nach „_pm_AdressCheck“ |
5.0.0 | 2004-12-21 | Die intern verwendete Prozedur „_mi_RemoveCharacterString“ wurde durch eine verallgemeinerte Prozedur erstzt, nämlich „_mi_ReplaceCharacterString“ |
4.0.5 | 2003-10-04 | Explizite Datentyps-Konvertierung im Falle der Rückgabe von Konstanten oder „NULL“ |
3.5.22 | 2002-08-30 | |
3.5.12 | 2001-10-17 | |
3.5.11 | 2001-09-06 | |
3.5.9 | 2001-06-16 | |
3.5.8 | 2001-05-19 | |
3.5.0 | 2000-11-23 | Erstmalig in dieser Version erstellt |
Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:
Unformatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/pm_AdressenCheck_Pu?PLZ=<value>&Ort=<value>&Strasse=<value>&Hausnummer=<value>'
Mit xmllint 6) formatierte Ausgabe:
curl -X POST 'http://<partner>-<project>.dstore.de/default/engine/pm_AdressenCheck_Pu?PLZ=<value>&Ort=<value>&Strasse=<value>&Hausnummer=<value>' | xmllint --format -
use dStore_php\WebService; $service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80); $request = new WebService\Requests\Engine\Procedure\Request( new WebService\Requests\AccessData('default'), 'pm_AdressenCheck_Pu', array( 'PLZ' => '<value>', 'Ort' => '<value>', 'Strasse' => '<value>', 'Hausnummer' => '<value>', // 'ReturnResult' => 1, // 'OrtVorPLZ' => 1, // 'StrasseVorPLZ' => 0 ) ); $service->execute($request); $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); $ResultSet = $xml_result->getRowsAsArray(); $OutputParams = $xml_result->getOutputParametersAsArray();
XML zur Ausführung mit der Methode engine/execute, z.B. per
curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?> <ListOfBatches> <Batch No="0"> <Procedure Name="pm_AdressenCheck_Pu"> <Parameters> <Parameter Name="PLZ"><!-- varchar value --></Parameter> <Parameter Name="Ort"><!-- varchar value --></Parameter> <Parameter Name="Strasse"><!-- varchar value --></Parameter> <Parameter Name="Hausnummer"><!-- varchar value --></Parameter> <!-- <Parameter Name="ReturnResult">1</Parameter> --> <!-- <Parameter Name="OrtVorPLZ">1</Parameter> --> <!-- <Parameter Name="StrasseVorPLZ">0</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>