Cara memvalidasi nomor kartu kredit sering dianggap pekerjaan setengah jam: ambil isi kolom, jalankan pemeriksaan checksum, tampilkan pesan galat bila gagal. Kenyataannya, keluhan pengguna tentang formulir pembayaran hampir selalu berasal dari hal lain, yaitu urutan pemeriksaan yang keliru dan asumsi tersembunyi tentang bentuk masukan. Halaman ini membahas urutan yang tahan uji, cara menulis pesan galat yang menolong, dan alasan mengapa hasil validasi yang lolos belum berarti transaksi akan berhasil.
Apa yang sebenarnya dicegah oleh validasi
Validasi bentuk di formulir punya satu tugas yang jelas: menangkap kesalahan sebelum permintaan mahal dikirim ke jaringan. Ia menyaring salah ketik, masukan kosong, tempelan dari sumber lain yang membawa spasi dan tanda hubung, serta nilai yang panjangnya tidak masuk akal untuk jaringan yang bersangkutan.
Yang tidak bisa dilakukannya adalah membuktikan bahwa kartu itu nyata, aktif, atau boleh dipakai. Semua itu hanya diketahui penerbit melalui permintaan otorisasi. Menyadari batas ini penting, karena sistem yang memperlakukan lolosnya validasi sebagai izin akan mengambil keputusan bisnis berdasarkan informasi yang salah.
Karena itu, ada baiknya membedakan dua istilah yang sering dicampur: bentuk yang benar dan nomor yang bisa dipakai. Yang pertama adalah urusan formulir, yang kedua adalah urusan penerbit. Kalau tim Anda menyamakan keduanya, pesan galat yang muncul di layar pun akan mencampur dua sebab yang berbeda, dan pengguna tidak akan tahu apa yang sebenarnya harus diperbaiki.
Urutan pemeriksaan yang tahan uji
Urutan berikut dipakai luas karena setiap langkah mempersempit kemungkinan kesalahan tanpa menghasilkan pesan yang menyesatkan:
- Pembersihan. Buang spasi, tanda hubung, dan karakter pemisah lain yang mungkin ikut tersalin. Jangan menolak masukan hanya karena mengandung pemisah.
- Pemeriksaan karakter. Pastikan sisa karakternya benar-benar berupa angka. Huruf dan simbol hampir selalu berarti salah tempel.
- Pemeriksaan panjang. Tetapkan batas minimum dan maksimum yang wajar, lalu sesuaikan dengan jaringan yang terdeteksi bila Anda mengenalinya.
- Pengenalan prefiks. Tentukan jaringan dari beberapa digit pertama, dan gunakan hasilnya untuk memilih aturan panjang yang tepat.
- Perhitungan checksum. Baru di sini algoritma Luhn dijalankan sebagai penyaring terakhir.
Membalik urutan ini, misalnya menjalankan checksum sebelum membersihkan pemisah, akan membuat banyak masukan yang sebenarnya benar dinyatakan salah.
Mengapa validasi di peramban saja tidak cukup?
Pemeriksaan di sisi peramban berguna untuk memberi umpan balik cepat, tetapi tidak boleh menjadi satu-satunya penjaga. Apa pun yang berjalan di perangkat pengguna dapat dilewati, dimatikan, atau diganti, dan permintaan bisa dikirim langsung ke titik akhir Anda tanpa melewati formulir sama sekali.
Karena itu, aturan yang sama harus ada di sisi server. Praktik yang sehat adalah menulis aturan sekali, lalu memakainya di kedua tempat sejauh memungkinkan, sehingga tidak ada perbedaan perilaku yang membingungkan antara apa yang diterima peramban dan apa yang diterima peladen.
Pesan galat seperti apa yang harus dilihat pengguna?
Pesan galat yang baik menjelaskan apa yang salah dan apa yang harus dilakukan, tanpa membocorkan aturan internal secara berlebihan. Beberapa prinsip praktis:
| Situasi | Pesan yang menolong | Pesan yang menyusahkan |
|---|---|---|
| Kolom kosong | Minta nomor kartu dilengkapi | Menyebut validasi gagal |
| Ada huruf | Sebut bahwa hanya angka yang diterima | Menyebut checksum tidak cocok |
| Panjang tidak wajar | Sebut jumlah digit yang diharapkan | Menyuruh memeriksa kembali tanpa petunjuk |
| Checksum tidak cocok | Sarankan memeriksa ulang angka yang diketik | Menyebut istilah teknis internal |
Hindari juga memblokir pengguna yang menempelkan nomor dari aplikasi lain. Kebiasaan menyalin adalah hal yang wajar, dan memaksa pengetikan manual hanya menambah kesalahan.
Mengapa nomor yang lolos validasi tetap ditolak?
Karena validasi bentuk dan otorisasi bekerja di lapisan yang berbeda. Validasi bentuk hanya melihat susunan digit, sedangkan otorisasi bertanya kepada penerbit tentang saldo, status kartu, dan kebijakan risiko. Banyak penolakan yang sah datang dari lapisan kedua, misalnya karena kartu diblokir sementara oleh bank penerbitnya.
Karena itu, rancang alur Anda agar penolakan dari gateway ditampilkan dengan jelas tetapi tidak menakutkan, dan pastikan pengguna bisa mencoba kartu lain tanpa kehilangan isi formulirnya. Kegagalan teknis sesaat juga perlu dibedakan dari penolakan yang sesungguhnya, karena keduanya menuntut tindakan yang berbeda. Pola penanganan lengkapnya ada di checklist pengujian formulir pembayaran.
Mencoba validator dengan nomor dari generator kartu virtual
Cara tercepat untuk menguji validator Anda adalah menyiapkan sekumpulan masukan yang sudah diketahui benar maupun salah. Generator kartu virtual di situs ini dapat membuat beberapa nomor sekaligus per jaringan, dan semuanya sah secara struktur tetapi tidak pernah diterbitkan sebagai kartu nyata, sehingga aman disimpan di dalam repositori pengujian.
Uji juga masukan negatif: nomor dengan pemisah aneh, nomor dengan panjang berlebih, dan nomor yang digit terakhirnya dirusak. Bila semua masukan itu ditangani dengan pesan yang tepat, validator Anda sudah berada di jalur yang benar. Penjelasan tentang bagian-bagian nomor yang sedang diperiksa bisa dibaca di uraian format nomor kartu.
Catatan untuk pengembang: jangan hanya mengandalkan sisi klien
Perlakukan validasi sebagai dua lapis yang saling melengkapi. Lapis pertama berjalan di peramban untuk kenyamanan, lapis kedua di peladen sebagai penentu akhir. Keduanya harus mendapat masukan yang sudah dibersihkan, dan keduanya harus sepakat soal panjang serta prefiks yang didukung.
Simpan kumpulan masukan uji di dalam repositori, lengkap dengan harapan untuk masing-masing: mana yang harus diterima, mana yang harus ditolak, dan pesan apa yang diharapkan. Ketika aturan berubah, kumpulan itu akan langsung menunjukkan apa yang ikut berubah. Tanpa data uji tetap, perubahan panjang untuk satu jaringan bisa diam-diam merusak validasi untuk jaringan lain.
Satu kebiasaan lain yang terbukti berguna adalah mencatat alasan setiap penolakan di dalam catatan sistem, tanpa menyertakan nomor kartunya. Catatan seperti itu memudahkan penelusuran ketika ada pengguna yang mengeluh, dan sekaligus menjaga agar data sensitif tidak ikut tersalin ke berkas teks yang dibaca banyak orang.
Langkah berikutnya
Tuliskan urutan pemeriksaan Anda di atas kertas, lalu bandingkan dengan urutan yang dibahas di halaman ini. Bila ada langkah yang hilang, tambahkan berikut kasus ujinya. Setelah itu ambil beberapa nomor contoh dari halaman generator dan masukkan semuanya, baik yang benar maupun yang sengaja dirusak, untuk memastikan setiap penolakan disertai pesan yang bisa dipahami orang biasa.