Dec 7, 2013

Analisis Nomor Kartu Kredit Visa & Master di Indonesia

Kartu kredit di Indonesia yang paling umum digunakan adalah yang berjenis visa atau mastercard yang akan berbentuk seperti gambar berikut:

Pada gambar diatas terlihat bahwa kartu ini berjenis mastercard, dikeluarkan oleh "CIMB Niaga", dan berjenis platinum dengan nomor kartu kredit "5289 1988 8888 8888" dengan nama pemilik kartu "Kenneth Harry"


Jadi dari sini terlihat sebuah properti pertama bahwa nomor kartu kredit memiliki 16 digit angka [0-9] yang kita generalisasi sebagai berikut:
$$X=\{x_i\big|1\leq{i}\leq{16}\text{ and }0\leq{x_i}\leq{9}\}$$

Dari ke-16 angka tersebut, angka-angka pada kartu kredit terbagi menjadi 3 bagian besar yaitu:
  1. BIN (Bank Identification Number)
    BIN ini adalah 6 angka terkiri \(x_1,x_2,x_3,x_4,x_5,x_6\) dimana \(x_1\) adalah system code (4 untuk visa, dan 5 untuk master), khusus untuk master \(1\leq{x_2}\leq{5}\). Sisa digit adalah kode bank dan jenis kartu. Saat ini ada beberapa website yang menyediakan list dari BIN ini binlist (free) dan bindb (bayar)
    Contoh:
    540184: Citibank Reward Master
    432449: Danamon Platinum Visa
    489087: Mega Carefour Visa
    548117: CIMB Niaga Gold Master
  2. Account Number
    merupakan 9 angka setelah BIN yaitu \(x_7,x_8,x_9,x_{10},x_{11},x_{12},x_{13},x_{14},x_{15}\). Nomor ini seharusnya tidak digenerate secara sequential, tapi kemungkinan menggunakan random generator standart dengan inisial seed hanya masing-masing bank yang tahu.
  3. Check Sum Number
    digit terakhir yaitu \(x_{16}\) adalah check sum digit, yang digenerate menggunakan algoritma Luhn.

Peran Algoritma Luhn

Pada saat membayar kartu kredit via ATM, seringkali tidak terdapat informasi mengenai nama pemilik kartu, tagihan yang dibebankan, tanggal jatuh tempo, dll. Sehingga sering membuat grogi apakah nomor kartu kredit yang dimasukkan ini sudah benar atau belum, jangan2 ini nomor kartu kredit orang lain yang dibayar.

Untuk menanggulangi kesalahan tersebut, maka digunakan algoritma luhn untuk mengecek apakah nomor kartu kredit tersebut valid atau tidak.

Berikut ini adalah algoritma Luhn, yaitu:
$$f(X)=\left(\sum_{i=1}^{16}{h(x_i,i)}\right)\bmod{10}=0$$
dimana
$$h(x,i)=\left\{
\begin{array}{1 1}
x & \quad \text{ if $i$ is even}\\
\left\lfloor{\frac{x}{5}}\right\rfloor+\left(2x\bmod{10}\right) & \quad \text{ if $i$ is odd}
\end{array}
\right.$$
Beberapa kegunaan dari algoritma ini adalah sebagai berikut:

Pertama
Apabila secara tidak sengaja kita mengganti salah satu nilai dari \(X\), maka \(f(X)\neq{0}\)

Proof:
Nilai \(f(X)=0\) apabila kita ganti nilai \(x_i\) dengan \(x'_i\) maka nilai \(f(X')=(10-x_i+x'_i)\bmod{10}\). Agar nilai \(f(X')=0\) maka nilai \(x'_i=\left\{10n+x_i\big|0\leq{n}\right\}\), sehingga nilai \(x'_i\) yang memungkinkan hanya \(x'_i=x_i\).

Kedua
Apabila secara tidak sengaja dua digit yang bersebelahan tertukar, maka \(f(X')\neq{0}\) memiliki error rate sebesar 2.7 persen.

Proof:
misalkan ada dua digit yang bersebelahan tertukar dan tetap menyebabkan \(f(X')=0\), maka \(\left(h\left(x_i,i\right)+h\left(x_{i+1},i+1\right)\right)\bmod{10}=\left(h\left(x_{i+1},i\right)+h\left(x_i,i+1\right)\right)\bmod{10}\)

Untuk mempermudah perhitungan, maka \(h\left(x_i,i\right)\) untuk \(i\) ganjil, dapat diubah menjadi:
$$h\left(x_i,i\right)=2x_i-9\left\lfloor\frac{x_i}{5}\right\rfloor\text{ if $i$ is odd}$$
sehingga menjadi:
$$x_i+2x_{i+1}-9\left\lfloor\frac{x_{i+1}}{5}\right\rfloor=x_{i+1}+2x_i-9\left\lfloor\frac{x_i}{5}\right\rfloor\\x_{i+1}-9\left\lfloor\frac{x_{i+1}}{5}\right\rfloor=x_i-9\left\lfloor\frac{x_i}{5}\right\rfloor$$
karena \(0\leq{x_i,x_{i+1}}\leq{9}\), maka \(\left(x_i,x_{i+1}\right)=\left(0,9\right)\), sehingga error rate dari algoritma ini untuk dua digit bersebelahan yang tertukar adalah 2.7 persen.

Berikut ini adalah \(h(x_i,i)\) untuk setiap input:
0123456789
genap0123456789
ganjil0246813579

No comments:

Post a Comment