Algoritma digit pemeriksa adalah aturan berhitung yang menghasilkan lambang terakhir pada sebuah nomor, sehingga salah ketik sederhana dapat dikenali tanpa menghubungi pihak mana pun. Meskipun setiap skema memberi nama sendiri untuk aturannya, hampir semuanya berdiri di atas kerangka yang sama. Halaman ini memetakan keluarga itu, menjelaskan apa yang berubah dari satu anggota ke anggota lain, dan menunjukkan pertanyaan yang perlu diajukan sebelum memilih salah satunya.
Ada berapa cabang keluarga algoritma digit pemeriksa?
Kalau Anda membandingkan aturan dari berbagai skema penomoran, kerangka besarnya selalu sama. Lambang-lambang sebelum digit pemeriksa diberi bobot, hasilnya dijumlahkan, jumlah itu diambil sisanya terhadap sebuah bilangan modulus, lalu sisa tersebut dipetakan menjadi satu lambang. Yang berbeda antaranggota keluarga hanyalah tiga hal: bobot yang dipakai, besarnya modulus, dan cara sisa dipetakan.
Dari tiga hal itulah muncul tiga cabang yang paling sering dijumpai. Cabang pertama bekerja dengan modulus sepuluh dan biasa disebut mod-10. Cabang kedua bekerja dengan modulus sebelas dan disebut mod-11. Cabang ketiga memakai modulus sembilan puluh tujuh dan disebut mod-97; cabang ini cocok untuk nomor panjang karena sisa baginya lebih beragam sehingga lebih banyak kesalahan yang bisa dibedakan.
Yang menarik, anggota keluarga ini tidak terikat pada jenis nomor tertentu. Sebuah aturan mod-10 dapat dipakai untuk kartu pembayaran, sedangkan aturan mod-11 dapat dipakai untuk nomor registrasi. Yang menentukan pilihan bukan jenis nomornya, melainkan panjang nomor, kumpulan karakternya, dan sumber kesalahan yang paling sering terjadi.
Apa bedanya mod-10, mod-11, dan mod-97
Perbedaan utama terletak pada seberapa banyak sisa yang bisa dibedakan. Semakin besar modulus, semakin banyak nilai sisa yang mungkin, sehingga semakin banyak pula pola kesalahan yang bisa dipisahkan satu dari yang lain.
| Anggota keluarga | Modulus | Kecenderungan pemakaian | Yang perlu diingat |
|---|---|---|---|
| mod-10 | Sepuluh | Nomor pendek sampai sedang | Perhitungannya paling sederhana dan mudah diperiksa dengan tangan |
| mod-11 | Sebelas | Nomor dengan kumpulan angka dan huruf | Sisa yang besar kadang tidak cukup dipetakan ke satu lambang, sehingga perlu aturan tambahan |
| mod-97 | Sembilan puluh tujuh | Nomor panjang dengan huruf di dalamnya | Daya bedanya besar, tetapi perhitungannya paling berat untuk dikerjakan manual |
Perlu dicatat bahwa tabel ini menggambarkan kecenderungan, bukan aturan wajib. Tidak ada lembaga pusat yang menetapkan cabang mana harus dipakai untuk jenis nomor tertentu; tiap skema memilih sendiri dan menuangkannya dalam dokumen penerbitannya.
Keanggotaan sebuah algoritma pada keluarga ini juga tidak menentukan kekuatannya sebagai pengaman. Semua langkahnya terbuka dan dapat dihitung mundur. Digit pemeriksa hadir untuk menangkap kesalahan penyalinan, bukan untuk menahan pihak yang sengaja memasukkan nomor karangan.
Bobot dan modulus: dua tombol yang bisa diubah
Bayangkan deretan karakter sebagai barisan angka yang berjalan dari kiri ke kanan. Pemberian bobot berarti setiap posisi dikalikan dengan angka tertentu sebelum dijumlahkan. Ada anggota keluarga yang memakai bobot tetap untuk semua posisi, ada yang memakai bobot yang bergantian, dan ada yang memakai bobot yang naik seiring posisinya makin ke kiri.
Bilangan modulus berperan sebagai pemotong. Setelah semua hasil perkalian dijumlahkan, jumlah itu dibagi dengan modulus dan yang diambil adalah sisanya. Sisa itulah yang kemudian diubah menjadi lambang pemeriksa, kadang dengan cara dikurangkan dari modulus terlebih dahulu.
Titik paling rumit ada pada pemetaan sisa. Bila modulusnya sepuluh, sisa selalu berupa satu angka sehingga pemetaannya mudah. Bila modulusnya sebelas, sisa bisa bernilai sepuluh, dan nilai itu berada di luar kumpulan angka yang diizinkan. Di sinilah tiap skema mengambil jalan berbeda: sebagian membuang nilai tersebut lalu menghitung ulang, sebagian memetakannya ke lambang lain seperti huruf.
Parameter-parameter ini bersifat khusus untuk setiap skema, jadi tidak ada gunanya menebak. Aturan yang benar adalah mengikuti dokumen penerbitan skema tersebut, lalu menguji pelaksanaan Anda dengan contoh yang skema itu sendiri sediakan.
Mengapa sebagian algoritma menangkap salah ketik tukar posisi?
Ada dua jenis kesalahan yang perlu dibedakan. Yang pertama adalah salah ketik satu karakter, misalnya angka yang seharusnya tertulis justru tergeser ke angka tetangganya. Jenis ini hampir selalu tertangkap, karena setiap perubahan pada satu posisi mengubah jumlah berbobot dengan cara yang sulit ditiadakan.
Jenis kedua adalah dua karakter bersebelahan yang bertukar tempat. Di sini hasilnya bergantung pada susunan bobot. Bila kedua posisi itu memiliki bobot yang sama besar, pertukaran tidak mengubah jumlah sama sekali, sehingga kesalahan lolos tanpa jejak. Sebaliknya, bila bobot kedua posisi berbeda, jumlahnya berubah dan kesalahan tertangkap. Inilah alasan banyak skema memilih bobot yang bergantian atau bobot yang menaik, bukan bobot yang seragam.
Konsekuensinya jelas: sebuah algoritma yang menyatakan dirinya mampu menangkap semua kesalahan pengetikan sedang melebih-lebihkan kemampuannya. Yang bisa dikatakan secara jujur adalah pola kesalahan apa yang tertangkap dan pola apa yang lolos, dan itulah pertanyaan yang layak diajukan kepada siapa pun yang mengklaim sebuah aturan pemeriksaan.
Empat hal yang perlu ditanyakan sebelum memilih algoritma
Sebelum menetapkan aturan untuk sebuah sistem baru, ada empat pertanyaan yang sebaiknya dijawab lebih dahulu:
- Seberapa panjang nomor yang akan diperiksa, karena panjang menentukan berapa banyak sisa yang perlu dipetakan.
- Apakah kumpulan karakternya murni angka atau bercampur huruf, karena huruf memerlukan langkah pengubahan sebelum perhitungan.
- Dari mana kesalahan paling sering datang, apakah dari tangan manusia yang mengetik atau dari mesin yang menyalin, karena keduanya menghasilkan pola galat yang berbeda.
- Bagaimana lambang pemeriksa dinyatakan bila hasilnya tidak muat dalam satu angka, karena pertanyaan ini sering dilupakan sampai implementasi berjalan.
Semua contoh angka di halaman ini adalah hasil rekaan untuk menjelaskan gagasan aritmetikanya. Tidak ada satu pun yang berasal dari skema nyata, dan tidak ada yang boleh dipakai untuk menebak nomor yang benar-benar diterbitkan sebuah lembaga.
Bila keempat pertanyaan itu sudah dijawab, langkah berikutnya adalah menuliskan aturannya secara lengkap, termasuk kasus tepi yang jarang muncul. Implementasi yang hanya menangani kasus biasa akan gagal pada nomor yang sah tetapi tidak lazim, dan kegagalan seperti itu paling sulit dilacak karena muncul jarang.
Untuk pengembang: satu kerangka untuk banyak anggota keluarga
Karena semua anggota keluarga berbagi kerangka yang sama, implementasi Anda sebaiknya juga begitu. Buat satu fungsi umum yang menerima daftar bobot, nilai modulus, dan aturan pemetaan sisa. Setiap skema kemudian hanya menjadi sekumpulan parameter, bukan salinan kode baru. Pendekatan ini memangkas jumlah tempat yang perlu diperiksa ketika ada perubahan aturan.
Sediakan pula contoh uji untuk setiap skema, terdiri atas satu nilai yang seharusnya lolos dan satu nilai yang digit pemeriksanya sengaja dirusak. Nilai yang dirusak itu jauh lebih berharga daripada menambah contoh sukses yang isinya mirip, karena ia mengunci perilaku penolakan. Bila suatu hari nilai itu diterima, Anda langsung tahu ada perubahan yang masuk tanpa disadari.
Terakhir, pisahkan keputusan aturan dari keputusan tampilan. Aturan menjawab apakah digit pemeriksa terpenuhi, sedangkan tampilan memutuskan bagaimana kesimpulan itu disampaikan. Alat validasi nomor memisahkan keduanya sehingga setiap skema dapat ditampilkan berdampingan. Perbandingan antara anggota keluarga ini juga bersinggungan dengan nomor panjang berhuruf, yang dibahas lebih jauh pada struktur IBAN dan pemeriksaan mod-97, sedangkan kerangka pelaksanaannya dijelaskan pada pembahasan cara kerja validasi nomor.
Uji setiap anggota keluarga dengan contoh yang sengaja dirusak, bukan hanya dengan contoh yang seharusnya lolos. Contoh yang lolos membuktikan bahwa perhitungannya berjalan, sedangkan contoh yang dirusak membuktikan bahwa penolakannya bekerja. Kedua jenis pengujian itu menutup celah yang berbeda, dan hanya keduanya bersama-sama yang memberi gambaran tentang perilaku sebenarnya.
Dokumentasikan pula varian mana yang dipakai untuk setiap skema. Nama keluarga yang sama dapat menyembunyikan pola bobot yang berbeda, dan dua sistem yang mengaku memakai keluarga algoritma yang sama bisa saja menghasilkan kesimpulan berbeda pada masukan yang sama. Mencatat nama keluarga saja tidak cukup; yang perlu tercatat adalah susunan bobot dan modulus yang benar-benar dijalankan.
Apa yang sebaiknya dilakukan berikutnya?
Tulislah daftar parameter untuk satu skema yang paling dekat dengan pekerjaan Anda, lalu jalankan satu contoh yang sengaja dirusak untuk memastikan penolakannya bekerja. Setelah itu, bandingkan hasilnya dengan pembahasan struktur IBAN dan pemeriksaan mod-97 untuk melihat bagaimana keluarga algoritma yang sama dipakai pada nomor panjang. Bagi tim yang menggabungkan banyak skema dalam satu alat, catatan tentang konsistensi bidang pada data uji memberi konteks tambahan.