Telefon ön eki, bir numaranın hangi ülkeye ait olduğunu gösteren kısa bir işarettir; ama numaranın sahibinin nerede yaşadığını söylemez. Bu yazıda ülke kodu ile alan kodu arasındaki farkı, mobil numaralarda coğrafi bağın neden zayıfladığını ve numarayı adresle eşleştirmeye çalışırken hangi sınırların kabul edilmesi gerektiğini bulacaksınız.
Ülke kodu ile alan kodu neyi gösterir?
Uluslararası bir numaranın başında, o numaranın hangi ülkeye ait olduğunu belirten bir kod bulunur. Bu kodun uzunluğu ülkeden ülkeye değişir; kısa olanlar da vardır, daha uzun olanlar da. Kodun kendisi bir numaralandırma planının parçasıdır ve o ülkenin numara aralıklarını bütünüyle kapsar.
Ülke kodundan sonra gelen bölüm, ülkenin kendi iç düzenine göre anlam kazanır. Bazı ülkelerde bu bölümün bir kısmı coğrafi bir alanı gösterir; bazılarında ise numaranın türünü, örneğin sabit mi mobil mi olduğunu anlatır. Bu yüzden numaranın geri kalanını okumak, ülkenin kendi planını bilmeyi gerektirir.
Buradan çıkan ilk sonuç şudur: numaranın başındaki kod, adres alanıyla doğrudan bir ilişki kurmaz. Kod, numaranın hangi ülkeye ait olduğunu söyler; o ülkedeki hangi şehre ait olduğunu söylemez. Şehir bilgisi, ancak ülkenin planı coğrafi bölümleme içeriyorsa ve o bölüm hâlâ geçerliyse tahmin edilebilir.
Mobil numaralar bir şehre bağlı mıdır?
Mobil numaralar, kullanıcının bulunduğu yerden bağımsız çalışacak şekilde tasarlanmıştır. Numara, abonelik açılırken bir operatöre ve bir seriye bağlanır; kullanıcı ise başka bir şehre taşınsa bile numarasını korur. Bu nedenle mobil bir numaranın başındaki kod, sahibinin bugün nerede yaşadığını göstermez.
Bu durum, numarayı adresle eşleştirmeye çalışan uygulamalar için önemli bir sınırdır. Bir kullanıcının mobil numarası, kayıtlı adresinin bulunduğu şehirden farklı bir seriye ait olabilir. Bu uyuşmazlığı hata saymak, doğru veriyi yanlış diye işaretlemek anlamına gelir.
Sabit hatlarda coğrafi bağ daha güçlüdür; çünkü hat fiziksel olarak bir yere bağlanır. Ama bu bağ da mutlak değildir. İşletmeler santral numaralarını farklı şehirlerde kullanabilir, numara taşıma işlemleriyle hat başka bir bölgeye taşınabilir. Yani sabit hatta bile kod, yalnızca bir eğilim gösterir, kesin bir kanıt sunmaz.
Numara taşınabilirliği ön ek çıkarımını nasıl bozar?
Numara taşınabilirliği, bir kullanıcının operatör değiştirirken numarasını korumasını sağlar. Kullanıcı açısından bu büyük bir kolaylıktır; ama numaranın başındaki kodun hangi operatöre ait olduğu bilgisini geçersiz kılar. Kod artık yalnızca numaranın ilk atandığı aralığı gösterir.
Coğrafi bilgi için de benzer bir etki vardır. Bir numara başka bir bölgeye taşındığında, eski bölgeye ait kod korunur. Bu yüzden koddan yola çıkarak bölge tahmini yapmak, zamanla daha da güvenilmez hale gelir. Bugün doğru olan bir tahmin, birkaç yıl sonra aynı numara için yanlış olabilir.
Bu nedenle numara ile adres arasındaki ilişkiyi bir doğrulama kuralı olarak değil, bir işaret olarak kullanmak gerekir. Uyuşma varsa bu bir onay değildir; uyuşmazlık varsa da bu bir hata değildir. Kuralı bu şekilde gevşetmek, gerçek kullanıcıları gereksiz yere engellemeyi önler.
Taşınabilirlik ayrıca numaranın operatör bilgisini de belirsizleştirir. Bir kodun hangi operatöre atandığı, geçmişte anlamlı bir bilgiydi; bugün aynı numara başka bir operatörün şebekesinde çalışıyor olabilir. Bu yüzden numaradan operatör tahmini yapmak da aynı ölçüde güvenilmezdir. Kısa mesaj gönderen sistemler için bu bilgi hâlâ bir tahmin olarak kullanılabilir, ama kesin bir yönlendirme kuralı olarak kullanılamaz.
Bu gerçeğin pratik sonucu, numara doğrulamasını iki katmana ayırmaktır. Birinci katman biçimdir: uzunluk, karakter kümesi ve ülke kodu uyumu. Bu katman kesin sonuç verir ve sert biçimde uygulanabilir. İkinci katman coğrafi çıkarımdır: numaranın hangi bölgeye ait olabileceği. Bu katman doğası gereği olasılıklıdır ve yalnızca uyarı üretebilir.
Biçim ve uzunluk beklentileri neden ülkeden ülkeye değişir?
Bir numaranın kaç haneli olduğu sorusunun dünya ölçeğinde tek bir cevabı yoktur. Ülkeler kendi planlarını kendi ihtiyaçlarına göre kurar; nüfus, hat sayısı ve operatör yapısı bu kararı etkiler. Bu yüzden uluslararası bir sistemde numara uzunluğunu sabit bir sayıyla denetlemek yanlış sonuç verir.
Aynı durum ayırıcı karakterler için de geçerlidir. Bazı ülkeler numarayı iki ya da üç gruba böler, bazıları ise hiç ayırıcı kullanmaz. Bu fark, yalnızca görsel değildir; kopyala yapıştır yapan kullanıcı, ayırıcıları da beraberinde getirir. Karşılaştırma yapmadan önce bu karakterleri temizlemek, eşleştirme hatalarını ortadan kaldırır.
Ülke kodunun kendisi de bir ila üç hane arasında değişir. Bu yüzden kodu sabit uzunlukta varsaymak, bazı ülkelerin numaralarını yanlış ayrıştırmaya yol açar. Doğru yaklaşım, kodu ülke seçiminden almak ya da bilinen bir kod listesiyle eşleştirmektir. Böylece hem artı işaretiyle yazılan hem de yerel biçimde yazılan numaralar aynı şekilde işlenir. Ülke kodlarının veri modelinde nasıl tutulduğunu uluslararası adres biçimi yazısında ayrıntılı olarak ele alıyoruz.
Ön ek ve yer eşleşmesi nerede işe yarar?
Bu eşleşmenin işe yaradığı yerleri ve sınırını şöyle ayırabiliriz:
- ülke kodu uyumu: formda seçilen ülkeyle numaranın kodu uyuşmuyorsa bu, en yaygın yazım hatasıdır
- biçimlendirme: ülke koduna göre gruplama ve ayırıcı kuralı seçmek girdiyi okunur hale getirir
- kötüye kullanım: aynı koddan çok sayıda kayıt gelmesi bir inceleme sinyali olabilir
- sınır: numarayı adresin zorunlu bir parçası saymak ya da adresi numaradan türetmeye çalışmak doğru değildir
Bu eşleşme, kesin bir doğrulama aracı olmasa da bazı pratik işlerde faydalıdır. Formda ülke seçilmişken numaranın ülke kodunun uyuşup uyuşmadığını kontrol etmek, en yaygın yazım hatasını yakalar. Kullanıcı yanlış ülkenin kodunu yazdıysa, bu hata biçim denetimiyle hemen görülür.
İkinci kullanım, numaranın biçimini ülkeye göre düzenlemektir. Numara gruplaması, ayırıcı karakterler ve uzunluk beklentisi ülkeden ülkeye değişir. Ülke koduna göre bir biçimlendirme kuralı seçmek, kullanıcının girdiği numarayı okunur hale getirir ve yazım hatalarını azaltır.
Üçüncü kullanım, dolandırıcılık ve kötüye kullanım kontrolleridir. Aynı koddan çok sayıda kayıt gelmesi ya da numaranın biçiminin tutarsız olması, bir inceleme sinyali olabilir. Burada da amaç kesin bir yargı vermek değil, şüpheli durumları ayırmaktır.
Buna karşılık, numarayı adresin zorunlu bir parçası saymak ya da adresi numaradan türetmeye çalışmak doğru değildir. Adres ile numara birbirini destekleyen iki ayrı alandır; biri diğerinin yerine geçmez.
Geliştiriciler için: numarayı metin olarak saklamak
Numarayı sayı olarak saklamak, en sık yapılan tasarım hatasıdır. Sayı tipinde baştaki sıfırlar düşer, artı işareti kaybolur ve çok uzun numaralar hassasiyetini yitirebilir. Numara aritmetik bir değer değildir; biçimlendirilmiş bir metin olarak saklanmalıdır.
Saklama biçimi ile gösterim biçimini ayırın. Veritabanında ülke kodu ve ulusal numara ayrı alanlarda, ayırıcı karakterlerden arındırılmış halde dursun. Gösterim sırasında ise ülkeye göre gruplama uygulanır. Böylece aynı numara farklı ülkelerde doğru biçimde görünür ve karşılaştırma her zaman aynı değer üzerinden yapılır.
Doğrulamayı uluslararası biçim üzerinden kurun. Kullanıcı numarayı yerel biçimde yazabilir; sistem bunu uluslararası biçime çevirip öyle saklamalıdır. Bu dönüşüm, ülke kodu bilgisiyle birlikte yapılmalıdır; aksi halde aynı numaranın iki farklı yazımı iki ayrı kayıt gibi görünür.
Test verisi hazırlarken numarayı uydurmayın. Üretilen numaralar gerçek bir hizmette olmamalıdır; ama biçim olarak o ülkenin planına uymalıdır. Aksi halde biçim doğrulayan kodunuz hiç sınanmamış olur. Sitede üretilen numaralar doğru yerel biçimde üretilir, her üretimde değişir ve hizmette olan numaralar değildir.
Sonraki adımlar
Numara ile adres arasında bir kural kuracaksanız, bunu bir uyarı olarak tasarlayın; uyuşmazlık halinde kaydı engellemek yerine kullanıcıya sorun. Ülkeye göre biçimlendirme kurallarını denemek için adres üretici sayfasında farklı ülkelerden örnek numaralar görebilir, adres alanlarıyla birlikte nasıl davrandıklarını ise ödeme adımındaki form testleri yazısında inceleyebilirsiniz.