Adres doğrulama, bir adresin sisteminize kabul edilebilir olduğunu söyler; adresin gerçekten var olduğunu değil. Bu yazıda normalleştirme ile doğrulama arasındaki ayrımı, dünyada neden her adresi kapsayan tek bir kaynağın bulunmadığını ve gerçekçi bir doğrulama katmanının hangi işleri yapabileceğini bulacaksınız.
Normalleştirme ile doğrulama arasındaki fark nedir?
Normalleştirme, bir adres metnini düzenli bir biçime sokar. Kısaltmaları açar, gereksiz boşlukları temizler, büyük-küçük harfi tek biçime indirir ve mümkünse eksik alanları tamamlar. Sonuçta elinizde aynı bilgiyi taşıyan, ama tutarlı yazılmış bir kayıt olur. Bu işlem adresin gerçek olup olmadığıyla ilgilenmez; yalnızca yazımı düzenler.
Doğrulama ise bunun bir adım ötesine geçer ve şu soruyu sorar: bu adres gerçek dünyada var mı, oraya gönderi ulaşabilir mi? Bu sorunun cevabı, yalnızca metnin biçimine bakılarak verilemez. Bir kaynağa, bir kütüğe ya da resmî bir listeye ihtiyaç duyar.
İki işlem sıklıkla birbirine karıştırılır çünkü ikisi de aynı formun üzerinde çalışır. Oysa aralarındaki fark, bir belgenin kopyasını düzeltmek ile o belgenin gerçekten düzenlenmiş olduğunu kontrol etmek arasındaki fark kadardır.
Normalleştirmenin bir de gizli faydası vardır: aynı adresin iki farklı yazımını tek bir gösterime indirir. Bir kullanıcı “Cadde” yazarken başka bir kullanıcı “Cd” yazabilir, bir üçüncüsü ise kısaltmayı hiç kullanmayabilir. Bu üç kayıt, normalleştirilmediği sürece sistemde üç ayrı yer gibi görünür ve hiçbiri diğeriyle eşleşmez. Normalleştirme, bu gürültüyü temizleyerek tekrar eden kayıtları görünür kılar.
Biçim denetimi neyi yakalar, neyi kaçırır?
Biçim denetimi, alanların varlığına, karakter kümesine ve uzunluğa bakar. Posta kodu alanının beklenen kalıba uyup uymadığını, eyalet alanının listede olup olmadığını, sokak satırının boş olup olmadığını kontrol eder. Ayrıca alanların birbiriyle tutarlı olup olmadığını, örneğin eyalet ile posta kodunun aynı bölgeyi işaret edip etmediğini sınayabilir.
Biçim denetiminin kapsamını şöyle özetleyebiliriz:
- baktığı yerler: alanların varlığı, karakter kümesi ve uzunluk beklentisi
- yakaladığı durumlar: eksik alan, yanlış karakter, aşırı uzun metin ve birbiriyle tutarsız bölge
- kaçırdığı durumlar: yazılan sokağın gerçekten var olup olmadığı
- kaçırdığı durumlar: o numarada bir bina bulunup bulunmadığı ve kodun gerçekten kullanımda olup olmadığı
Bunlar hafife alınacak kontroller değildir; gerçek dünyadaki hataların büyük bölümü bu düzeyde yakalanır. Eksik alan, yanlış karakter, tutarsız bölge ve aşırı uzun metin, veri kalitesini bozan başlıca sorunlardır ve hepsi biçim düzeyinde görülebilir.
Buna karşılık biçim denetimi şunu asla bilemez: yazılan sokak gerçekten var mı, o numarada bir bina var mı, posta kodu gerçekten kullanımda mı? Kalıba uyan bir değer, tamamen kurgusal olabilir. Bu yüzden biçim denetiminden geçen bir adresi “doğrulanmış” saymak yanıltıcıdır.
Dünyada neden tek bir adres kütüğü yok?
Adresler ülke ülke, hatta bölge bölge farklı kurumlar tarafından yönetilir. Kimi ülkelerde ulusal bir adres kayıt sistemi vardır; kimi ülkelerde böyle bir sistem yoktur ve adresler yalnızca posta dağıtımı sırasında ortaya çıkar. Bu dağınık yapı, tek ve güncel bir dünya kütüğünün kurulmasını engeller.
İkinci engel, adreslerin sürekli değişmesidir. Yeni sokaklar açılır, numaralar yeniden düzenlenir, belediyeler birleşir ve posta kodları güncellenir. Bir kütüğün faydalı olması için bu değişiklikleri sürekli takip etmesi gerekir; bu da her ülke için ayrı bir veri akışı ve bakım yükü demektir.
Üçüncü engel, erişim ve lisanstır. Bazı ülkelerin adres verileri açıktır, bazılarınınki yalnızca ticari lisansla kullanılabilir, bazıları ise hiç paylaşılmaz. Bu nedenle dünya ölçeğinde çalışan bir hizmet, kaçınılmaz olarak farklı kapsama düzeylerine sahip olur.
Dördüncü engel, verinin niteliğidir. Bir adresin var olması, orada bir teslim noktası bulunduğu anlamına gelmez. Aynı binada birden fazla işletme olabilir, bir bina yıkılmış ama kayıttan düşmemiş olabilir, bir parsel yalnızca arsa olarak görünebilir. Bu belirsizlik, gerçek bir doğrulamanın neden her zaman bir olasılık bildirdiğini açıklar: kaynak ne kadar iyi olursa olsun, son sözü teslimat süreci söyler.
Doğrulama ne kadar ileri gidebilir?
Gerçekçi bir doğrulama katmanı üç düzeyde çalışır. Birinci düzey biçimdir: alanlar var mı, karakterler ve uzunluk uygun mu? İkinci düzey kapsamdır: idari bölüm ile posta kodu birbirine ait mi, kod o ülkede geçerli bir aralıkta mı? Üçüncü düzey ise yalnızca resmî bir kaynağın bulunduğu ülkelerde mümkündür ve adresin gerçekten var olup olmadığını sorar.
Bu üç düzeyin her biri, bir sonrakinin ön koşuludur. Biçimden geçmeyen bir kaydı var olup olmadığı için sorgulamak anlamsızdır. Bu yüzden doğrulamayı tek bir adım gibi değil, sıralı bir süzgeç olarak kurmak gerekir.
Kapsam kontrolü, çoğu uygulama için en iyi maliyet-fayda dengesidir. Tam bir adres kütüğü gerektirmez; yalnızca posta kodu aralıkları ve bölüm eşleşmeleri gibi görece küçük tablolarla çalışır. Yine de kullanıcıların girdiği hataların önemli bir bölümünü yakalar.
Doğrulama başarısız olduğunda ne yapmalı?
Her doğrulama başarısızlığını sert bir ret olarak ele almak, kullanıcıyı kaybetmenin en hızlı yoludur. Adres verisi düzensizdir: yeni yapılmış bir bina henüz listeye girmemiş olabilir, kırsal bir adres standart kalıba uymayabilir ya da kullanıcı ikinci satırı beklenen biçimde yazmamış olabilir.
Bu yüzden doğrulamanın üç sonucu olmalıdır: kesin geçti, kesin başarısız ve belirsiz. Belirsiz durumda kaydı engellemek yerine uyarı göstermek ve kullanıcının onayını almak daha doğrudur. Kesin başarısız olan durumları dar tutmak, gereksiz engellemeleri önler.
Doğrulamayı yalnızca tarayıcıda çalıştırmak da yetersizdir. İstemciden gelen veriye güvenilmez; aynı kontroller sunucuda da yapılmalıdır. Aksi halde doğrulamayı atlayan bir istek, veritabanına doğrudan yazılabilir.
Geliştiriciler için: süzgeç sırası ve manuel onay
Süzgeç sırasını şöyle kurun: önce alanları temizleyin ve normalleştirin, sonra biçimi denetleyin, ardından kapsam kontrolünü çalıştırın ve en sonunda varsa gerçek adres kaynağına başvurun. Bu sırayı bozan bir akış, geçerli kayıtları gereksiz yere reddeder ve hata mesajlarını anlaşılmaz hale getirir.
Tek bir düzenli ifadeyle bütün adresleri doğrulamaya çalışmayın. Böyle bir ifade ya çok gevşek olur ve hiçbir işe yaramaz, ya da çok sıkı olur ve geçerli adresleri reddeder. Ülkeye göre ayrı kurallar tanımlamak, başlangıçta daha fazla iş gibi görünse de bakımı çok daha kolaydır.
Manuel onay yolunu baştan açık tutun. Doğrulamanın belirsiz sonuç verdiği kayıtları bir kuyruğa alın ve bir kişinin karar verebileceği bir arayüz sunun. Bu yol, hem veri kalitesini korur hem de sistemin katılığı yüzünden kaybedilen kullanıcıları geri kazandırır.
Son olarak, doğrulama sonucunu kayıtla birlikte saklayın. Adresin hangi düzeyde doğrulandığını bilmek, sonradan yapılacak denetimlerde ve hata ayıklamada işinizi çok kolaylaştırır.
Sonraki adımlar
Doğrulama katmanınızı kurmadan önce hangi düzeyde duracağınıza karar verin; çoğu uygulama için biçim ve kapsam kontrolü yeterlidir. Bu kontrolleri farklı ülkelerden örneklerle denemek isterseniz adres üretici sayfası her ülkenin alan düzenini ayrı ayrı gösterir. Doğrulamanın adım adım nerede duracağını görmek için ABD adres yapısı yazısı iyi bir başlangıçtır; sınır durumlarını nasıl saklayacağınızı ise test verisinde adres kayıtları yazısında bulabilirsiniz.