Bir adres doğrulama şirketi için çalışırken bu soruyu çok gördüm. Aynı soru ile arama yapan programcıların daha erişilebilir olmasını sağlamak için cevabı buraya gönderiyorum. Milyarlarca adres işlediğim şirket ve bu süreçte çok şey öğrendik.
İlk olarak, adresler hakkında birkaç şey anlamamız gerekir.
Adresler düzenli değil
Bu, düzenli ifadelerin tükendiği anlamına gelir. Adresleri çok özel bir biçimde eşleştiren basit normal ifadelerden, aşağıdakilere kadar her şeyi gördüm:
/ \ S + (\ d {2,5} \ s +) ([a | p]?! M \ b) (([a-z-Z | \ s +] {1,5}) {1,2}) ? ([\ s |, |.] +) (([a-zA-Z | \ s +] {1,30}) {1,4})? (mahkeme | ct | cadde | st | sürücü | dr | şerit | ln | yol | rd | Blvd) ([\ s |, | |;.]? +) (([a-z-Z | \ s +] {1,30}) {1,2}) ([ \ s |, |.] +) \ B (AK |? AL | AR | AZ | CA | CO | CT | DC | DE | FL | GA | GU | HI | IA | İD | IL | IN | KS | KY | LA | MA | MD | ME | MI | MN | MO | MS | MT | NC | ND | NE | NH | NJ | NM | NV | NY | OH | tamam | VEYA | PA | RI | SC | SD | TN | Teksas | UT | VA | VI | VT | WA | WI | Batı | WY) ([\ s |, |.] +) (\ s + d \ {5}) ([\ s |, |.]? +) / i
... için bu bir 900+ hat sınıf dosyası daha maç için anında bir süper kütleli normal ifade verebildigi. Bunları tavsiye etmiyorum (örneğin, yukarıdaki regex'in bir kemanı, bu da çok fazla hata yapıyor ). Bunun işe yaraması için kolay bir sihirli formül yok. Teoride ve tarafından teori, bu normal bir ifade ile adresleri eşleştirmek mümkün değildir.
USPS Yayını 28 , tüm anahtar sözcükleri ve varyasyonları ile mümkün olan birçok adres biçimini belgelemektedir. Hepsinden kötüsü, adresler genellikle belirsizdir. Kelimeler birden fazla şey anlamına gelebilir ("St" "Saint" veya "Street" olabilir) ve icat ettiklerinden emin olduğum kelimeler vardır. ("Stravenue" nun bir sokak eki olduğunu kim bilebilirdi?)
Adresleri gerçekten anlayan bir koda ihtiyacınız vardır ve eğer bu kod mevcutsa, bu bir ticari sırdır. Ama eğer gerçekten içine girerseniz, muhtemelen kendi başınıza dönebilirsiniz.
Adresler beklenmedik şekil ve boyutlarda
İşte bazı (tam) adresler:
1) 102 main street
Anytown, state
2) 400n 600e #2, 52173
3) p.o. #104 60203
Bunlar bile muhtemelen geçerlidir:
4) 829 LKSDFJlkjsdflkjsdljf Bkpw 12345
5) 205 1105 14 90210
Açıkçası, bunlar standart değildir. Noktalama işaretleri ve satır kesmeleri garanti edilmez. Neler oluyor:
Bir sokak adresi, bir şehir ve eyalet içerdiği için 1 numara tamamlandı. Bu bilgi ile adresi yeterince tanımlamak yeterlidir ve "teslim edilebilir" olarak kabul edilebilir (bazı standartlaştırmalarla).
Bir adres tanımlamak için yeterli olan bir sokak adresi (ikincil / birim numarası ile) ve 5 haneli bir posta kodu içerdiğinden, 2 sayısı tamamlanmıştır.
Sayı 3 , posta kodu içerdiği için eksiksiz bir posta kutusu biçimidir.
Posta kodu benzersiz olduğu için 4 numara da tamamlanmıştır , yani özel bir kuruluş veya şirket bu adres alanını satın almıştır. Benzersiz bir ZIP kodu, yüksek hacimli veya konsantre dağıtım alanları içindir. Posta kodu 12345'e gönderilen her şey Schenectady, NY'daki General Electric'e gider. Bu örnek özellikle kimseye ulaşmayacak, ancak USPS yine de sunabilecektir.
5 numara da tamamlandı, ister inanın ister inanmayın. Sadece bu numaralarla, tam adres, olası tüm adreslerin bir veritabanına ayrıştırıldığında bulunabilir. Eksik sayıları, ikincil işaretleyiciyi ve ZIP + 4 kodunu doldurmak, her sayıyı bir bileşen olarak gördüğünüzde önemsizdir. İşte tam olarak genişletilmiş ve standartlaştırılmış gibi görünüyor:
205 N 1105 W Apt 14
Beverly Hills CA 90210-5221
Adres verileri size ait değil
Lisanslı satıcılara resmi adres verileri sağlayan çoğu ülkede, adres verilerinin kendisi yönetim ajansına aittir. ABD'de USPS adreslerin sahibidir. Aynı durum Kanada Postası, Royal Mail ve diğerleri için de geçerlidir, ancak her ülke sahipliği biraz farklı uygular veya tanımlar. Bunu bilmek önemlidir, çünkü genellikle adres veritabanının tersine mühendislikini yasaklar. Verileri nasıl alacağınıza, saklayacağınıza ve kullanacağınıza dikkat etmelisiniz.
Google Haritalar, hızlı adres düzeltmeleri için yaygın bir yöntemdir, ancak Hizmet Şartları oldukça engelleyicidir; örneğin, verilerini veya API'larını bir Google Haritası göstermeden ve yalnızca ticari olmayan amaçlarla (ödeme yapmadığınız sürece) kullanamazsınız ve verileri depolayamazsınız (geçici önbellekleme hariç). Mantıklı. Google'ın verileri dünyanın en iyilerinden. Ancak, Google Maps yok değil adresini doğrulayın. Bir adres yoksa adresi nerede, hala gösterecektir ediyorum o eğer olmak did (kendi sokakta denemek; mevcut değil bildiğim bir ev numarası kullanın) mevcuttur. Bu bazen yararlıdır, ancak bunun farkında olun.
Nominatim'in kullanım politikası , özellikle yüksek hacimli ve ticari kullanım için benzer şekilde sınırlayıcıdır ve veriler çoğunlukla ücretsiz kaynaklardan alınmıştır, bu yüzden iyi korunmaz (bu açık projelerin doğasıdır) - ancak bu yine de uygun olabilir ihtiyaçlarınızı. Büyük bir topluluk tarafından desteklenir.
USPS'nin bir API'si var, ancak çok azalıyor ve hiçbir garanti veya destek yok. Ayrıca kullanımı zor olabilir. Bazı insanlar bunu sorunsuz bir şekilde kullanmaktadır. Ancak USPS'nin API'larını yalnızca adresleri gönderilecek adresleri onaylamak için kullanmanızı gerektirdiğini kaçırmak kolaydır.
İnsanlar adreslerin zor olmasını bekliyor
Ne yazık ki, toplumumuzu adreslerin karmaşık olmasını beklemeye şartlandırdık. İnternette bu konuda düzinelerce iyi UX makalesi var, ancak gerçek şu ki, bireysel alanlara sahip bir adres formunuz varsa, kullanıcıların beklediği şey, bu, biçimin beklediği biçim, ya da biçimin olmaması gereken bir alan gerektiriyor olabilir. Veya kullanıcılar adreslerinin belirli bir bölümünü nereye koyacaklarını bilmiyorlar.
Bu günlerde ödeme formlarının kötü UX'i hakkında devam edebilirdim, ancak bunun yerine adresleri tek bir alanda birleştirmenin hoş bir değişiklik olacağını söyleyeceğim - insanlar adreslerini uygun gördükleri şekilde yazabilecekler uzun formunuzu anlamaya çalışmak yerine. Ancak, bu değişiklik beklenmedik olacak ve kullanıcılar başlangıçta biraz sarsıcı bulabilir. Sadece bunun farkında ol.
Bu ağrının bir kısmı, ülke alanını adresin önüne çıkararak hafifletilebilir. Önce ülke alanını doldurduklarında, formunuzu nasıl göstereceğinizi biliyorsunuzdur. Belki de tek alanlı ABD adresleriyle başa çıkmanın iyi bir yoluna sahipsiniz, bu yüzden ABD'yi seçtiyse formunuzu tek bir alana azaltabilir, aksi takdirde bileşen alanlarını gösterebilirsiniz. Düşünmeniz gereken şeyler!
Şimdi neden zor olduğunu biliyoruz; bu konuda ne yapabilirsin?
USPS, satıcılara, müşterilere doğrulanmış adresler sağlamak için CASS ™ Sertifikasyon adı verilen bir süreç aracılığıyla lisans verir. Bu satıcıların aylık olarak güncellenen USPS veritabanına erişimi vardır. Yazılımları sertifikalandırılacak titiz standartlara uymak zorundadır ve genellikle yukarıda tartışıldığı gibi sınırlayıcı şartlar üzerinde mutabakat gerektirmezler.
Listeleri işleyebilen veya API'leri kullanabilen birçok CASS Sertifikalı şirket vardır: Melissa Data, Experian QAS ve SmartyStreets bunlardan birkaçı.
("Reklamcılık" için pullanma nedeniyle bu noktada cevabımı kestim. Sizin için çalışan bir çözüm bulmak size kalmış.)
Gerçek: Gerçekten millet, bu şirketlerin hiçbirinde çalışmıyorum. Bu bir reklam değil.