Jumat, 31 Mei 2013

ALGORITMA LUHN


Oke kawan-kawan, kali ini saya akan berbagi info tentang salah satu materi yang saya dapat pada mata kuliah Otomata di  ukampus. Algoritma Luhn, itulah namanya. Dosen saya memberikan suatu algoritma yang biasa di pakai di dunia perbankan itu, dan meminta mahasiswanya untuk membuat coding programnya.

Langsung saja, sebenarnya apa sih Algoritma Luhn itu? Mari kita bahas..

Algoritma Luhn adalah sebuah program algoritma yang dikembangkan oleh seorang ilmuan bernama Hans Peter Luhn. Algoritma ini menggunakan salah satu fungsi matematis komputasi yang bisa dipergunakan untuk memverifikasi keabsahan sebuah nomor kartu kredit. Algoritma Luhn ini mempunyai 3 langkah utama yang sederhana tetapi sangat luar biasa untuk membuktikan apakah sebuah nomor kartu kredit adalah palsu atau benar. Langkah-langkah tersebut adalah sebagai berikut:

  1. Pada 16 digit angka kartu kredit, setiap angka dari kiri ke kanan pada posisi ganjil dikalikan dengan dua, jika hasil perkalian lebih besar dari pada 9, maka hasil  tsb dikurangi dengan 9. Lalu jumlahkan semua hasilnya
  2. Setiap angka dari kiri ke kanan pada posisi genap dibiarkan tetap, lalu jumlahkan semuanya.
  3. Setelah itu, hasil perhitungan point pertama dijumlahkan dengan hasil perhitungan point ke 2, lalu bagi dengan 10. Jika hasilnya habis dibagi 10, maka nomor kartu tersebut dinyatakan sah, jika tidak maka dinyatakan tidak sah .
Nah, sekarang kita gunakan teori dari mas Luhn ini pada prakteknya..







Misalkan, saya mempunyai sebuah kartu kredit seperti gambar di atas ini, bisakah kita mengetahui apakah kartu ini adalah asli, yang tentunya sudah memiliki keabsahan dari pihak bank?

Dari data-data di atas, mari sekarang kita lakukan cek validitas nomornya menggunakan algoritma Luhn. Kita mendapatkan 16 nomor yakni: 5588 - 3201 - 2345 - 6789.

 Langkah pertama:

Kalikan 2 untuk setiap nilai posisi ganjil.
N = (5 X 2) + (8 X 2) + (3 X 2) + (0 X 2) + (2 X 2) + (4 X 2) + (6 X 2) + (8 X 2)
N = (10 - 9) + (16 - 9) + (6) + (0) + (4) + (8) + (12 - 9) + (16 - 9)
N = 1 + 7 + 6 + 0 + 4 + 8 + 3 + 7
N = 36 
Langkah kedua:
Jumlahkan semua nilai untuk posisi genap.
N = 5 + 8 + 2 + 1 + 3 + 5 + 7 +9
N = 40
Langkah ketiga:
Jumlahkan hasil langkah pertama dan kedua lalu dibagi dengan 10.
N = (36 + 40) : 10
N = 76 : 10
N = 7,6
Karena hasil perhitungannya adalah tidak habis dibagi 10 , artinya secara otomatis kita sudah menghitung untuk mengetahui bahwa kartu kredit yang saya miliki itu adalah palsu, dan tentunya tidak memiliki keabsahan untuk digunakan.


 Apakah sudah selesai pembahasan kita? Tentu saja belum, cara di atas adalah langkah manual yang dapat kita hitung dengan mudah jika sudah mengetahui rumusnya, saya rasa anak SD atau SMP juga bisa mengerjakan itu, tetapi tantangan kita kali ini adalah membuat program kalkulasi dalam komputer dari teknik di atas. Kali ini saya memilih mencoba menggunakan pemrograman C++ untuk  membuat coding programnya, kita lihat..


#include <iostream>
using namespace std;

int toInt(const char c)
{
    return c-'0';
}

int confirm( const char *id)
{
    bool is_odd_dgt = true;
    int s = 0;
    const char *cp;

    for(cp=id; *cp; cp++);
    while(cp > id) {
        --cp;
        int k = toInt(*cp);
        if (is_odd_dgt) {
            s += k;
        }
        else {
            s += (k!=9)? (2*k)%9 : 9;
        }
    is_odd_dgt = !is_odd_dgt;
    }
    return 0 == s%10;
}

int main( )
{
    const char * t_cases[] = {
        " 5588320123456789",
        "1234567812345670",
        NULL,
    };
    for ( const char **cp = t_cases; *cp; cp++) {
        cout << *cp << ": " << confirm(*cp) << endl;
    }
    return 0;
}



Pada coding di atas saya membandingkan 2 buah nomer kartu kredit, yakni 5588320123456789 dan 1234567812345670, yang nantinya akan dilakukan pengecekan dengan metode Luhn dan akan mengeluarkan nilai biner 0 dan 1 untuk outputnya, dimana jika yang keluar adalah angka 1, maka kartu kredit tersebut adalah sah, dan  jika keluar angka nol maka artinya kartunya tidak sah

Hasil Program :




Akhirnya, selesai sudah pembahasan kita kali ini, semoga informasi yang saya bagikan bisa bermanfaat. Terima kasih




Tidak ada komentar:

Posting Komentar