Validasi alamat dan normalisasi sering disebut sebagai satu pekerjaan yang sama, padahal keduanya menjawab pertanyaan yang berbeda. Normalisasi merapikan bentuk tulisan, sedangkan validasi menilai seberapa masuk akal isinya. Sistem yang mencampur keduanya cenderung menolak alamat yang sah, atau sebaliknya meloloskan data yang jelas tidak mungkin.
Pembahasan berikut menjelaskan apa yang mampu dan tidak mampu dikerjakan masing-masing langkah, mengapa tidak ada satu sumber kebenaran untuk seluruh dunia, dan bagaimana menyusun urutan pemeriksaan yang tidak menyulitkan pengguna.
Dua pekerjaan yang berbeda
Normalisasi adalah pekerjaan menyeragamkan bentuk. Huruf diubah ke satu kasus, spasi berlebih dipangkas, gelar atau penanda dihapus, dan kode pos disesuaikan dengan pola penulisan yang dipilih. Hasil normalisasi selalu berupa nilai, dan nilainya bisa dibandingkan dengan nilai lain karena bentuknya sudah sama.
Validasi adalah pekerjaan menilai. Ia menjawab apakah nilai yang diberikan memenuhi aturan yang ditetapkan: bidang wajib sudah terisi, panjangnya wajar, karakter yang dipakai sesuai, dan bila ada daftar rujukan, nilainya ada dalam daftar itu. Hasil validasi berupa keputusan, bukan nilai baru.
Karena itu urutannya masuk akal: rapikan lebih dulu, baru nilai. Memvalidasi sebelum normalisasi membuat sistem menolak masukan yang sebenarnya sah, hanya karena penulisannya berbeda dari yang diharapkan.
Apa yang bisa dicapai normalisasi
Normalisasi yang dikerjakan dengan hati-hati menyelesaikan sebagian besar keluhan pengguna. Spasi ganda, huruf besar kecil yang tidak konsisten, dan tanda baca yang berbeda-beda adalah hal yang bisa dirapikan tanpa mengubah makna.
Yang dapat dicapai juga mencakup pengisian bagian yang jelas dari konteks. Bila pengguna memilih negara dan kota, wilayah tingkat pertama yang sesuai bisa diisi otomatis karena hubungan keduanya sudah diketahui. Begitu pula penulisan kode pos bisa diselaraskan dengan pola negara yang dipilih, selama polanya tidak dipaksakan pada nilai yang tidak sesuai.
Batasnya terletak pada makna. Normalisasi tidak bisa mengetahui bahwa sebuah nama jalan salah ketik, dan tidak bisa mengubah alamat menjadi benar. Ia hanya membuat bentuknya konsisten, sehingga langkah pemeriksaan berikutnya punya bahan yang layak dinilai.
Ada pula batas yang perlu dijaga. Normalisasi yang terlalu agresif bisa menghapus keterangan yang penting, misalnya tanda diakritik pada nama jalan, penanda arah mata angin, atau singkatan resmi yang justru bagian dari nama tempat. Nilai yang sudah dirapikan juga sebaiknya tidak menimpa nilai asli tanpa jejak, karena ketika pengguna mengeluh alamatnya berubah, Anda memerlukan nilai yang benar-benar diketik untuk menjelaskan apa yang terjadi. Simpan keduanya, dan tampilkan nilai hasil normalisasi sebagai bentuk yang dipakai sistem.
Apakah alamat bisa dipastikan benar hanya dari formatnya?
Tidak. Aturan format hanya bisa memastikan bahwa masukan tampak seperti alamat. Ia tidak bisa memastikan nomor rumahnya ada, bahwa penerimanya pernah tinggal di sana, atau bahwa bangunannya masih dipakai.
Alamat yang dibuat untuk keperluan pengujian justru memperlihatkan hal ini dengan jelas. Bentuknya sengaja dibuat sesuai aturan penulisan negara yang bersangkutan, tetapi tetap tidak merujuk pada lokasi nyata. Sistem yang menganggap semua masukan berformat benar sebagai alamat nyata akan memperlakukan data uji itu sebagai pelanggan sungguhan, dan itu bukan temuan yang membahagiakan saat pemeriksaan data.
Kesimpulan praktisnya: hasil pemeriksaan format harus dipahami sebagai penyaring kasar. Ia berguna untuk menangkap kesalahan ketik dan masukan asal-asalan, tetapi tidak boleh dipakai sendirian untuk memutuskan sesuatu yang berdampak, seperti menyetujui pengiriman atau mengunci akun.
Mengapa tidak ada satu basis data alamat sedunia?
Alamat bukan daftar tunggal yang dikelola satu lembaga. Ia tumbuh dari praktik pos setempat, dan setiap negara mengelolanya dengan cara sendiri. Sebagian negara menerbitkan berkas resmi berisi daftar alamat, sebagian lain hanya menerbitkan kode wilayah, dan sebagian lagi tidak menerbitkan apa pun yang lengkap.
Selain itu, alamat berubah terus: jalan baru dibuka, bangunan dibongkar, kode pos direvisi, dan nama wilayah diganti. Basis data yang disusun sekali lalu tidak dipelihara akan mulai salah tanpa terasa. Karena itu tawaran yang mengaku mampu memeriksa seluruh alamat di dunia dalam waktu nyata perlu dicurigai; yang mungkin dikerjakan adalah memeriksa formatnya, mencocokkan wilayah dan kode pos, serta memakai berkas resmi negara tertentu bila tersedia.
Perbedaan panjang dan susunan kode pos antarnegara, yang dibahas di panduan format kode pos, adalah contoh nyata mengapa satu aturan global tidak bisa ditulis.
Apa yang boleh diubah normalizer dan apa yang tidak
Normalizer boleh mengubah hal yang tidak mengubah makna: memangkas spasi di ujung, menyeragamkan huruf, menghapus tanda baca yang tidak berfungsi, dan menyusun ulang urutan bidang menurut negara yang dipilih. Ia juga boleh mengisi bidang yang nilainya dapat disimpulkan dari bidang lain, selama aturan penyimpulannya jelas dan dapat dipertanggungjawabkan.
Normalizer tidak boleh mengubah isi yang menjadi identitas alamat. Nama jalan, nomor rumah, nomor unit, dan nama penerima adalah nilai yang diketik pengguna, dan mengubahnya berarti membuat data baru yang tidak pernah dimasukkan siapa pun. Menghapus tanda diakritik, membetulkan ejaan atas dasar dugaan, atau mengganti nama kota dengan kota terdekat adalah perubahan yang tampak membantu tetapi merusak kepercayaan pada data.
Cara menguji batas itu adalah memastikan normalizer bersifat idempoten: menjalankannya dua kali pada nilai yang sama harus menghasilkan nilai yang sama seperti sekali jalan. Bila hasilnya berbeda pada jalan kedua, aturan Anda saling bertabrakan, dan gejalanya biasanya hanya muncul pada sebagian kecil masukan. Uji juga bahwa normalizer tidak pernah menambah keterangan yang tidak dapat disimpulkan, misalnya mengisi kode pos pada negara yang memang tidak memakainya.
Tingkatan pemeriksaan yang realistis
Tabel berikut merangkum apa yang bisa diharapkan pada setiap tingkat.
| Tingkat | Yang diperiksa | Yang tidak terjangkau |
|---|---|---|
| Format | Bidang terisi, panjang, karakter | Kebenaran isi |
| Wilayah | Kecocokan kota, wilayah, kode pos | Keberadaan bangunan |
| Berkas resmi | Alamat ada dalam daftar resmi negara itu | Alamat di negara tanpa berkas resmi |
Tingkat ketiga hanya tersedia untuk sebagian negara, dan bahkan di sana hasilnya bergantung pada seberapa baru berkas yang dipakai. Karena itu keputusan yang berdampak sebaiknya tidak pernah bersandar pada tingkat ketiga saja, terutama untuk alamat di luar wilayah tempat organisasi Anda beroperasi.
Catatan untuk pengembang: urutan langkah dan jalan keluar
Susun pemeriksaan berlapis dan hentikan pada kegagalan pertama. Mulai dari pemangkasan spasi dan penyeragaman huruf, lanjut ke pemeriksaan karakter dan panjang, lalu pencocokan wilayah bila data rujukannya tersedia. Setiap lapisan sebaiknya menghasilkan alasan kegagalan yang spesifik sehingga pengguna tahu bagian mana yang perlu diperbaiki.
Sediakan jalan keluar manual. Banyak alamat sah gagal dicocokkan karena daftar rujukan Anda tertinggal, karena wilayahnya baru dibentuk, atau karena pengguna tinggal di kompleks dengan penomoran khusus. Sistem tanpa jalan keluar akan memaksa pengguna mengetik data yang salah, dan data yang salah lebih mahal daripada satu peninjauan manual.
Simpan nilai asli yang diketik pengguna di samping nilai hasil normalisasi. Bila terjadi sengketa pengiriman atau keluhan, nilai asli itulah yang menjelaskan apa yang sebenarnya dimasukkan. Untuk menyusun data pengujian yang menguji jalur gagal ini, lihat panduan data alamat untuk pengujian, dan untuk contoh kasus pada formulir pengiriman, lihat contoh kasus uji formulir alamat.
Langkah berikutnya
Periksa urutan pemeriksaan di aplikasi Anda: pastikan normalisasi berjalan sebelum validasi, dan pastikan setiap penolakan menyebutkan bidang yang bermasalah. Setelah itu, uji dengan alamat dari beberapa negara yang bisa dihasilkan di generator alamat, lalu catat aturan mana yang ternyata terlalu ketat.