Często widziałem to pytanie, gdy pracowałem dla firmy weryfikującej adresy. Umieszczam tutaj odpowiedź, aby była bardziej dostępna dla programistów, którzy szukają tego samego pytania. Firma, w której byłem, przetwarzała miliardy adresów i przy okazji wiele się nauczyliśmy.
Najpierw musimy zrozumieć kilka rzeczy dotyczących adresów.
Oznacza to, że wyrażenia regularne są wyłączone. Widziałem to wszystko, od prostych wyrażeń regularnych, które dopasowują adresy w bardzo specyficznym formacie, do tego:
/ \ s + (\ d {2,5} \ s +) (?! [a | p] m \ b) (([a-zA-Z | \ s +] {1,5}) {1,2}) ? ([\ s |, |.] +)? (([a-zA-Z | \ s +] {1,30}) {1,4}) (sąd | ct | street | st | drive | dr | lane | ln | road | rd | blvd) ([\ s |, |. |;] +)? (([a-zA-Z | \ s +] {1,30}) {1,2}) ([ \ s |, |.] +)? \ b (AK | AL | AR | AZ | CA | CO | CT | DC | DE | FL | GA | GU | HI | IA | ID | IL | IN | KS | KY | LA | MA | MD | ME | MI | MN | MO | MS | MT | NC | ND | NE | NH | NJ | NM | NV | NY | OH | OK | OR | PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY) ([\ s |, |.] +)? (\ S + \ d {5})? ([\ S |, |.] +) / i
... do tego, w którym plik klasy liniowej 900+ generuje supermasywne wyrażenie regularne w locie, aby dopasować jeszcze więcej. Nie polecam ich (na przykład tutaj jest skrzypce powyższego wyrażenia regularnego, które popełnia wiele błędów ). Nie ma łatwej magicznej formuły, aby to zadziałało. W teorii i przez teorię, to nie jest możliwe, aby dopasować adresy z wyrażenia regularnego.
Publikacja USPS 28 dokumentuje wiele możliwych formatów adresów wraz ze wszystkimi ich słowami kluczowymi i odmianami. Co najgorsze, adresy są często niejednoznaczne. Słowa mogą oznaczać więcej niż jedną rzecz („Święty” może oznaczać „Święty” lub „Ulica”), a są słowa, które z pewnością wymyślili. (Kto wiedział, że „Stravenue” to sufiks ulicy?)
Potrzebowałbyś kodu, który naprawdę rozumie adresy, a jeśli ten kod istnieje, jest to tajemnica handlowa. Ale prawdopodobnie mógłbyś rzucić własne, jeśli naprawdę się tym interesujesz.
Adresy mają nieoczekiwane kształty i rozmiary
Oto kilka wymyślonych (ale kompletnych) adresów:
1) 102 main street
Anytown, state
2) 400n 600e #2, 52173
3) p.o. #104 60203
Nawet te są prawdopodobnie ważne:
4) 829 LKSDFJlkjsdflkjsdljf Bkpw 12345
5) 205 1105 14 90210
Oczywiście nie są one znormalizowane. Nie gwarantuje się stosowania znaków interpunkcyjnych ani podziałów wierszy. Oto, co się dzieje:
Numer 1 jest kompletny, ponieważ zawiera adres oraz miasto i województwo. Dzięki tym informacjom wystarczy zidentyfikować adres i można go uznać za „dostarczalny” (przy pewnej standaryzacji).
Numer 2 jest kompletny, ponieważ zawiera również adres (z numerem dodatkowym / jednostki) i 5-cyfrowy kod pocztowy, który jest wystarczający do zidentyfikowania adresu.
Numer 3 to pełny format skrytki pocztowej, ponieważ zawiera kod pocztowy.
Numer 4 jest również kompletny, ponieważ kod pocztowy jest unikalny , co oznacza, że podmiot prywatny lub korporacja zakupiła tę przestrzeń adresową. Unikalny kod pocztowy jest przeznaczony dla dużych lub skoncentrowanych miejsc dostawczych. Wszystko zaadresowane na kod pocztowy 12345 trafia do General Electric w Schenectady w stanie Nowy Jork. Ten przykład nie dotrze do nikogo w szczególności, ale USPS nadal byłby w stanie go dostarczyć.
Numer 5 jest również kompletny, wierz lub nie. Mając tylko te liczby, pełny adres można znaleźć, analizując go w bazie danych zawierającej wszystkie możliwe adresy. Wypełnienie brakujących kierunków, dodatkowego oznaczenia i kodu ZIP + 4 jest trywialne, gdy widzisz każdą liczbę jako składnik. Oto, jak to wygląda, w pełni rozwinięte i ustandaryzowane:
205 N 1105 W Apt 14
Beverly Hills CA 90210-5221
Dane adresowe nie należą do Ciebie
W większości krajów, które udostępniają licencjonowanym dostawcom oficjalne dane adresowe, same dane adresowe należą do agencji zarządzającej. W USA adresy są własnością USPS. To samo dotyczy Canada Post, Royal Mail i innych, chociaż każdy kraj egzekwuje lub definiuje własność nieco inaczej. Wiedza o tym jest ważna, ponieważ zwykle zabrania inżynierii wstecznej bazy danych adresów. Musisz uważać, jak pozyskiwać, przechowywać i wykorzystywać dane.
Mapy Google są popularnym miejscem do szybkiego poprawiania adresów, ale TOS są raczej zaporowe; na przykład nie możesz korzystać z ich danych lub interfejsów API bez pokazania mapy Google i tylko do celów niekomercyjnych (chyba że płacisz) i nie możesz przechowywać danych (z wyjątkiem tymczasowego buforowania). Ma sens. Dane Google należą do najlepszych na świecie. Jednak Google Maps nie weryfikuje adresu. Jeśli adres nie istnieje, to jeszcze pokazać, gdzie adres byłoby , gdyby to zrobił istnieje (spróbuj go na swojej własnej ulicy, korzystać z numer domu, które znasz, nie istnieje). Czasami jest to przydatne, ale pamiętaj o tym.
Polityka użytkowania Nominatim jest podobnie ograniczająca, szczególnie w przypadku dużych wolumenów i zastosowań komercyjnych, a dane pochodzą głównie z bezpłatnych źródeł, więc nie są tak dobrze utrzymywane (taki jest charakter otwartych projektów) - jednak może to nadal pasować Twoje potrzeby. Jest wspierany przez wspaniałą społeczność.
Sam USPS ma interfejs API, ale bardzo się obniża i nie ma żadnych gwarancji ani wsparcia. Może być również trudny w użyciu. Niektórzy używają go oszczędnie i bez problemów. Ale łatwo przeoczyć, że USPS wymaga, abyś używał ich API tylko do potwierdzania adresów do wysyłki za ich pośrednictwem.
Ludzie oczekują, że adresy będą trudne
Niestety, uwarunkowaliśmy nasze społeczeństwo, aby oczekiwało, że adresy będą skomplikowane. W całym Internecie można znaleźć dziesiątki dobrych artykułów UX na ten temat, ale faktem jest, że jeśli masz formularz adresowy z pojedynczymi polami, tego oczekują użytkownicy, mimo że utrudnia to w przypadku adresów skrajnych, które nie pasują do format, jakiego oczekuje formularz, a może formularz wymaga pola, którego nie powinien. Lub użytkownicy nie wiedzą, gdzie umieścić określoną część swojego adresu.
W dzisiejszych czasach mógłbym ciągle mówić o złym UX formularzy płatności, ale zamiast tego powiem tylko, że połączenie adresów w jedno pole będzie mile widzianą zmianą - ludzie będą mogli wpisać swój adres tak, jak uważają za stosowny , zamiast próbować wymyślić długi formularz. Jednak ta zmiana będzie nieoczekiwana i początkowo użytkownicy mogą uznać ją za nieco irytującą. Po prostu bądź tego świadomy.
Część tego bólu można złagodzić, umieszczając pole kraju z przodu, przed adresem. Kiedy najpierw wypełnią pole kraju, wiesz, jak wyświetlić formularz. Być może masz dobry sposób radzenia sobie z adresami w USA z jednym polem, więc jeśli wybierzesz Stany Zjednoczone, możesz zredukować formularz do jednego pola, w przeciwnym razie pokaż pola składowe. Tylko rzeczy do przemyślenia!
Teraz wiemy, dlaczego jest to trudne; co możesz z tym zrobić?
USPS udziela dostawcom licencji w ramach procesu zwanego CASS ™ Certification, aby zapewnić klientom zweryfikowane adresy. Dostawcy ci mają dostęp do bazy danych USPS, aktualizowanej co miesiąc. Ich oprogramowanie musi być zgodne z rygorystycznymi standardami, aby uzyskać certyfikat, i często nie wymagają zgody na takie ograniczające warunki, jak omówiono powyżej.
Istnieje wiele firm z certyfikatem CASS, które mogą przetwarzać listy lub mieć interfejsy API: Melissa Data, Experian QAS i SmartyStreets, aby wymienić tylko kilka.
(W związku z tym, że nie mogę się doczekać „reklamy”, skróciłem w tym miejscu swoją odpowiedź. To do Ciebie należy znalezienie rozwiązania, które będzie dla Ciebie odpowiednie).
Prawda: Naprawdę, ludzie, nie pracuję w żadnej z tych firm. To nie jest reklama.