Menu

Algoritma Luhn: cara kerja digit pemeriksa nomor kartu

Algoritma Luhn adalah penjumlahan sederhana yang memunculkan digit pemeriksa pada nomor kartu. Pelajari cara menghitungnya sendiri dan batas kemampuannya.

Diterbitkan

  • data uji
  • pembayaran
  • checksum

Algoritma Luhn adalah aturan berhitung yang menentukan satu digit terakhir pada hampir semua nomor kartu yang Anda lihat sehari-hari. Digit itu bukan angka acak: ia dihitung dari seluruh digit sebelumnya sehingga salah ketik sederhana bisa dikenali sebelum permintaan apa pun dikirim ke jaringan pembayaran. Nama lainnya adalah modulus sepuluh, dan asal-usulnya dapat dilacak ke ruang kerja IBM pada dasawarsa 1950-an sebelum akhirnya menjadi kebiasaan internasional dalam penomoran kartu.

Halaman ini menjelaskan cara kerjanya dengan bahasa sehari-hari, menunjukkan langkah perhitungan yang bisa Anda tiru di atas kertas, lalu menjelaskan mengapa lolos uji ini sama sekali tidak berarti kartu tersebut nyata.

Apa itu algoritma Luhn

Bayangkan sebuah nomor sebagai deretan digit yang berbaris dari kiri ke kanan. Algoritma Luhn berjalan dari ujung kanan, menggandakan nilai setiap digit pada posisi kedua, lalu menjumlahkan semua hasilnya dengan satu syarat: setiap hasil ganda yang melewati angka sembilan dikurangi sembilan lebih dulu. Bila total akhirnya habis dibagi sepuluh, nomor itu dianggap berbentuk benar.

Karena digit terakhir yang ditentukan oleh perhitungan ini, ia disebut digit pemeriksa. Digit-digit di sebelah kirinya bebas ditetapkan oleh penerbit, sedangkan digit terakhir harus cocok dengan hasil perhitungan. Hubungan itu yang membuat nomor kartu bisa diperiksa tanpa menghubungi bank mana pun.

Bagaimana cara menghitungnya dengan tangan

Anda tidak memerlukan perangkat lunak untuk mencobanya. Ikuti urutan berikut:

  1. Tulis nomor tanpa spasi, lalu hitung posisi digit mulai dari kanan.
  2. Gandakan nilai setiap digit pada posisi genap ketika dihitung dari kanan, termasuk digit pemeriksa itu sendiri.
  3. Setiap hasil ganda yang lebih besar dari sembilan dikurangi sembilan.
  4. Jumlahkan seluruh nilai yang sudah disesuaikan.
  5. Periksa apakah totalnya habis dibagi sepuluh. Kalau tidak, berarti ada digit yang salah.

Cara paling cepat untuk membiasakan diri adalah mengambil satu nomor uji, menghitung totalnya di atas kertas, lalu membandingkan hasil Anda dengan pemeriksa otomatis. Setelah dua atau tiga kali percobaan, polanya akan terasa alami karena nilainya hanya berputar di antara angka nol sampai sembilan belas.

Satu hal yang sering membingungkan pemula adalah pertanyaan dari sisi mana penghitungan dimulai. Aturannya berjalan dari digit paling kanan, dan justru karena itu digit pemeriksa berada di ujung kanan nomor: ia dihitung paling akhir, setelah seluruh digit lain sudah pasti. Bila Anda menambahkan satu digit baru di tengah nomor tanpa menghitung ulang, totalnya hampir pasti tidak lagi habis dibagi sepuluh.

Apakah nomor yang lolos Luhn pasti kartu asli?

Tidak, dan ini kesalahpahaman yang paling sering muncul. Uji Luhn hanya menjawab satu pertanyaan: apakah susunan digitnya konsisten dengan digit pemeriksanya. Pertanyaan tentang apakah rekening itu ada, masih terbuka, punya saldo, atau boleh dipakai bertransaksi berada di luar jangkauannya sepenuhnya.

Jawaban atas pertanyaan-pertanyaan itu hanya bisa diperoleh dari penerbit melalui permintaan otorisasi. Karena itulah pemeriksaan bentuk sering disebut sebagai penyaring pertama, bukan sebagai izin. Untuk keperluan pengujian, perlu diingat bahwa nomor yang kami hasilkan bersifat sah secara struktur namun tidak pernah diterbitkan untuk pemegang kartu mana pun.

Kesalahan ketik apa yang bisa ditangkap?

Tidak semua salah ketik sama. Tabel berikut merangkum perilaku yang lazim diamati:

Jenis kesalahan Apakah terdeteksi
Satu digit diganti dengan digit lain Selalu terdeteksi
Dua digit bersebelahan bertukar tempat Hampir selalu, kecuali pada pasangan tertentu seperti nol dan sembilan
Dua digit bertukar tempat yang berjarak Sering lolos tanpa terdeteksi
Dua digit salah sekaligus yang saling meniadakan Bisa lolos sepenuhnya

Pelajaran praktisnya sederhana: uji ini dirancang untuk menjaring kesalahan manusia saat mengetik, bukan untuk menahan pihak yang sengaja memasukkan nomor karangan. Siapa pun yang memahami aritmetikanya dapat menghitung digit pemeriksa yang benar dalam hitungan detik.

Mengapa checksum bukan alat keamanan

Istilah checksum sering membuat orang mengira ada unsur kriptografi di dalamnya, padahal tidak ada sama sekali. Semua langkahnya bersifat terbuka, dapat dihitung mundur, dan tidak memerlukan kunci rahasia. Menyembunyikan aturannya pun tidak menambah keamanan, karena tujuan sebenarnya bukan merahasiakan apa pun.

Anggap saja seperti angka terakhir pada nomor identitas: berguna untuk memastikan tidak ada salah salin, tetapi tidak membuktikan identitas siapa pun. Sistem yang memperlakukan lolosnya uji ini sebagai bukti bahwa pengguna berhak memakai kartu sedang mencampur dua hal yang berbeda.

Alasan metode ini bertahan begitu lama juga bukan karena kekuatannya, melainkan karena kesederhanaannya. Perhitungannya bisa dilakukan tanpa tabel, tanpa perangkat khusus, bahkan dengan tangan, dan hasilnya sama di mana pun. Dalam penomoran kartu, kesepakatan seperti itu justru lebih penting daripada kerumitan, karena setiap pihak yang menyentuh nomor harus bisa memeriksanya dengan cara yang sama.

Uji cepat lewat generator kartu virtual

Cara tercepat untuk melihat pola ini bekerja adalah menghasilkan beberapa nomor sekaligus di generator kartu virtual di situs ini, lalu menjumlahkan sendiri digit-digitnya. Setiap nomor yang keluar pasti lolos perhitungan Luhn, karena digit terakhirnya memang dihitung dari sisa nomornya, bukan diambil acak.

Bila Anda lebih tertarik pada susunan bagian-bagian nomor, pembagian antara prefiks dan digit rekening dijelaskan di uraian format nomor kartu. Setelah keduanya dipahami, langkah berikutnya adalah melihat bagaimana pemeriksaan itu disusun di dalam kode pada panduan validasi nomor kartu.

Catatan untuk pengembang: urutan pemeriksaan

Dalam praktik, menghitung Luhn bukanlah langkah pertama, melainkan langkah terakhir. Urutan yang biasanya dipakai adalah membersihkan pemisah dan spasi, memeriksa jumlah digit, memastikan semua karakter berupa angka, mengenali prefiks jaringan, lalu menghitung checksum. Memeriksa checksum sebelum panjangnya benar hanya menghasilkan kesimpulan yang menyesatkan.

Untuk data pengujian, simpan satu nomor dengan digit pemeriksa yang sengaja dirusak sebagai kasus negatif tetap. Nomor semacam itu harus selalu ditolak, dan bila suatu hari ia diterima, Anda tahu ada perubahan perilaku baru saja masuk. Kasus negatif seperti ini jauh lebih berharga daripada menambah kasus sukses kelima yang isinya mirip. Data masukan untuk pengujian semacam itu bisa dibuat dengan pola yang dijelaskan di halaman nomor kartu untuk pengujian.

Langkah berikutnya

Cobalah menghitung satu nomor dengan tangan hari ini; pemahaman itu akan bertahan lama. Bila Anda sedang menyiapkan data untuk formulir atau skrip, buat sekumpulan nomor di halaman generator dan simpan sebagai berkas acuan. Dan bila muncul pertanyaan tentang arti angka pertama pada sebuah kartu, lanjutkan ke pembahasan format.

Lanjut membaca

Artikel tentang Generator nomor kartu kredit palsu