Panjang nomor identitas nasional tidak mengikuti satu standar dunia, dan itu sebabnya formulir yang hanya menyediakan satu kolom untuk semua pengguna selalu bermasalah. Ada negara yang memakai sembilan atau sebelas angka, ada yang mencampur huruf dan angka, dan ada yang menyisipkan tanggal lahir di dalam nomornya. Tulisan ini memetakan perbedaan itu secara umum, menjelaskan mengapa panjangnya tidak bisa dipatok, dan menunjukkan cara menguji formulir yang melayani banyak negara.
Rentang panjang yang lazim ditemui
Sebagian besar nomor identitas penduduk berada di kisaran delapan sampai empat belas karakter, tetapi kisaran itu bukan aturan dan banyak pengecualian di kedua ujungnya. Yang lebih berguna daripada menghafal angka adalah mengenali pola yang berulang.
- Nomor yang seluruhnya terdiri dari angka, biasanya dengan panjang tetap untuk satu negara.
- Nomor yang mencampur huruf dan angka, dengan huruf sering dipakai sebagai penanda wilayah, jenis pemegang, atau tahun penerbitan.
- Nomor yang menyisipkan tanggal lahir, sehingga bagian depan nomornya selalu berubah menurut waktu.
- Nomor dengan satu atau dua digit pemeriksa di ujungnya, yang dihitung dari sisa angka lainnya.
- Nomor yang panjangnya berubah sesuai jenis dokumen, misalnya berbeda antara kartu penduduk dan paspor.
Beberapa sistem memang terbuka soal panjangnya. Nomor pajak orang pribadi di Brasil, misalnya, seluruhnya angka dan berjumlah sebelas dengan dua angka terakhir sebagai pemeriksa. Nomor asuransi sosial di Kanada berjumlah sembilan angka. Nomor di Amerika Serikat juga sembilan angka seperti yang diuraikan pada format nomor SSN di sana. Di luar contoh-contoh itu, lebih aman berpegang pada pola umum daripada menganggap satu panjang berlaku untuk semua negara.
Mengapa panjang dan susunannya berbeda-beda
Perbedaan ini bukan keisengan, melainkan jejak sejarah administrasi setiap negara. Sistem nomor penduduk dibuat pada waktu yang berbeda, oleh lembaga yang berbeda, dan untuk keperluan yang berbeda. Negara yang membangunnya sebelum komputer bekerja sebelum era basis data, sehingga nomor sering memuat informasi yang sekarang tidak lagi diperlukan, seperti tempat penerbitan atau tanggal lahir. Negara yang membangunnya belakangan cenderung memakai nomor acak tanpa makna, karena nomor yang tidak berarti apa-apa lebih sulit disalahgunakan.
Selain itu, satu negara bisa memiliki lebih dari satu nomor. Ada nomor untuk keperluan pajak, nomor untuk keperluan kesehatan, dan nomor kependudukan, yang semuanya berbeda dan tidak saling menggantikan. Ini sumber kebingungan yang paling sering muncul pada formulir internasional: pengguna mengisi kolom dengan nomor yang salah karena istilahnya diterjemahkan secara serampangan.
Apakah panjang nomor bisa berubah seiring waktu?
Bisa, dan perubahan itu pernah terjadi di beberapa negara ketika penduduk bertambah sehingga ruang nomornya habis. Bentuk perubahan yang paling umum adalah penambahan satu digit di depan atau di belakang, diikuti masa peralihan ketika nomor lama masih diakui. Karena itu, sistem yang menolak semua nomor dengan panjang lama akan mengunci sebagian pengguna yang sah dari akunnya sendiri.
Selain soal panjang, negara juga bisa mengganti cara penerbitan tanpa mengubah bentuknya. Bila nomor berisi penanda wilayah, perubahan cara penerbitan bisa membuat nomor baru memakai wilayah yang tidak terduga. Pelajaran praktisnya sederhana: jangan menyimpan asumsi tentang arti bagian dari nomor di dalam kode Anda, karena asumsi itu akan kedaluwarsa tanpa pemberitahuan.
Apakah digit pemeriksa membuktikan nomor itu milik seseorang?
Tidak. Banyak sistem nomor memakai satu atau dua digit terakhir yang dihitung dari angka lainnya dengan penjumlahan berbobot lalu sisa bagi. Aturan ini pintar untuk menangkap kesalahan ketik dan angka yang tertukar posisinya, dan kegunaannya memang hanya sampai di situ.
Karena digit itu bisa dihitung oleh siapa pun yang mengetahui aturannya, keberadaannya tidak membuktikan bahwa nomor tersebut diterbitkan oleh lembaga resmi, apalagi bahwa nomor itu milik orang tertentu. Sebagian nomor justru sama sekali tidak memuat digit pemeriksa, sehingga tidak ada cara aritmetika untuk memeriksanya. Perbedaan inilah yang membuat pemeriksaan keaslian tidak bisa digantikan oleh pemeriksaan bentuk.
Sebaiknya satu kolom atau beberapa kolom?
Pertanyaan ini muncul setiap kali sebuah formulir melayani lebih dari satu negara. Satu kolom yang bebas diisi paling mudah bagi pengguna dan paling sulit diolah; beberapa kolom terpisah, misalnya jenis dokumen, nomor, dan negara penerbit, paling mudah diolah tetapi menambah beban pengisian. Pilihan yang biasanya paling seimbang adalah satu kolom nomor ditambah satu pilihan negara penerbit, karena negara itulah yang menentukan aturan pemeriksaan.
Yang perlu dihindari adalah menebak negara penerbit dari bentuk nomornya. Banyak negara memakai panjang dan susunan yang mirip, sehingga tebakan itu sering salah dan kesalahannya tidak terlihat: nomor yang sah diperiksa dengan aturan negara lain lalu ditolak. Lebih baik bertanya sekali daripada menebak berkali-kali.
Untuk pengembang: jangan menuliskan panjang secara tetap
Aturan pertama adalah tidak mengunci panjang pada satu angka. Simpan panjang yang diperbolehkan sebagai data per negara, bukan sebagai kondisi di dalam kode, sehingga penambahan negara baru tidak memerlukan perubahan program. Sediakan rentang yang longgar, misalnya dari beberapa hingga belasan karakter, ditambah pemeriksaan jenis karakter.
Aturan kedua adalah selalu menyediakan cabang untuk format yang tidak dikenal. Situs Anda akan menerima pengguna dari negara yang belum Anda daftarkan, dan menolak mereka tanpa jalan keluar jauh lebih buruk daripada menerima nilai yang belum bisa Anda periksa. Cabang itu sebaiknya menerima masukan bebas dengan batas panjang yang wajar, lalu menandainya sebagai belum diperiksa agar tim Anda bisa menambahkannya kemudian.
Aturan ketiga adalah memisahkan pemeriksaan lunak dan keras. Pemeriksaan keras hanya untuk hal yang pasti, seperti keberadaan nilai dan batas panjang maksimal. Pemeriksaan berbasis pola, awalan wilayah, atau digit pemeriksa lebih baik diperlakukan sebagai peringatan ketika data dimasukkan petugas, bukan sebagai penolakan bagi pengguna.
Aturan keempat adalah menyimpan nilai yang diterima sebagaimana adanya. Jangan mengubah huruf kecil menjadi huruf besar atau sebaliknya tanpa mengetahui aturan negara penerbitnya, dan jangan membuang spasi atau tanda hubung sebelum sistem lain yang membutuhkannya sempat membaca nilai aslinya. Bila normalisasi memang diperlukan, lakukan pada salinan yang khusus dipakai untuk pencarian, sementara nilai asli tetap tersimpan utuh untuk keperluan pemeriksaan dan audit.
Untuk data uji, siapkan satu contoh untuk setiap pola di atas, termasuk satu nilai yang sengaja tidak memenuhi pola negara yang dipilih. Daftar negara yang didukung situs ini cukup luas, dan halaman seperti Indonesia atau Brasil memperlihatkan kebiasaan penulisan di sana. Bila Anda perlu menyusun contoh untuk banyak negara sekaligus, generator data identitas dapat menghasilkan bidang identitas lengkap menurut negara yang dipilih. Semua nilai yang dihasilkan hanya untuk pengujian dan tidak boleh dipakai untuk menyamar sebagai orang lain.
Langkah berikutnya
Buka daftar validasi di proyek Anda dan cari setiap tempat yang menetapkan panjang nomor identitas secara tetap. Pindahkan nilai itu ke data per negara, lalu tambahkan satu kasus uji dengan panjang yang tidak biasa agar cabang cadangan Anda benar-benar teruji.