-->

K.E ^_~ Yang lagi galau ini penawarnya link

Validasi Credit Card

Beberapa waktu lalu (tepatnya tahun lalu) saya mendapatkan task untuk membuat sistem pembayaran di aplikasi yang saya buat. Salah satu dari metode pembayarannya adalah menggunakan credit card. Dalam proses pembuatannya saya menemukan sedikit permasalahan di validasi credit card sebelum saya proses di merchant yang saya gunakan. Bagamaina caranya untuk mengetahui komposisi credit card number yang di input user itu valid? ternyata bisa menggunaka algoritma Luhn.



Algoritma Luhn adalah algoritma cek digit credit card number yang di temukan oleh ilmuan jenius Hans Peter Luhn. Dalam algoritma pengecekan credit card ini terdapat tiga langkah:

  1.  Kalikan dua setiap digit di posisi urutan ganjil. jika hasil perkalian tersebut lebih dari 9 jumlahkan tiap digitnya (ex: 18 jadi 1 + 8 = 9).
  2. Jumlahkan semua digit di deret baru tersebut.
  3. Lalu bagi dengah 10 (mod-10), jika hasilnya 0 berarti credit card itu VALID.
  Contoh:

   5105105105105100 << Coba kita validasi creadit card ini secara manual menggunakan algoritma Luhn.

  -  Kalikan dua setipa digit di posisi ganjil
     5-1-0-5-1-0-5-1-0-5-1-0-5-1-0-0
                        =
     10-1-0-5-2-0-10-1-0-5-2-0-10-1-0-0 # Jumlahkan tiap digit yang lebih dari 9
                        =
     1-1-0-5-2-0-1-1-0-5-2-0-1-1-0-0

-  Jumlahkan semua digit di deret baru tadi.
    1-1-0-5-2-0-1-1-0-5-2-0-1-1-0-0 = 20, Lalu bagi hasil penjumlahan ini dengan 10 (mod-10).

    20 / 10 = 0 (Valid)


  Langsung aja kita coba implementasikan algoritma di atas ke bahasa pemograman (Python). let's code!


   

import re


class CreditCard:
    """
    Usage: 
      - card = CreditCard()
      - card.check_number_type(credit_card_number) # to check credit card type.
      - card.luhn_check() # to validate credit card number use luhn.  
    """


    def __init__(self):
        self.cards = {
            'Maestro': re.compile(r"^(5018 | 5020 | 5038 | 6304 | 6759 | 676[1 - 3])"),
            'Visa': re.compile(r"^4"),
            'Master Card': re.compile(r"^5[1-5]"),
            'Diners Club': re.compile(r"^(36|38|30[0-5])"),
            'American Express': re.compile(r"^3[47]"),
            'Discover': re.compile(r"^(6011|65|64[4-9]|622)")
        }

    def check_number_type(self, num):
        for type, pattern in self.cards.items():
            if pattern.match(str(num)):
                return type
        return "Unknown credit card number"

    def luhn_check(self, num):
        """ use luhn mod-10 checksum """
        sum = 0
        card_numbers = str(num)
        num_digits = len(card_numbers)

        for count in range(0, num_digits):
            digit = int(card_numbers[count])
            if count % 2 is 0:
                digit *= 2
            if digit > 9:
                digit -= 9

            sum += digit

        return ((sum % 2) == 0)

   


comment 0 komentar:

Posting Komentar

Catatan:
Seluruh komentar yang masuk akan dimoderasi terlebih dahulu. Komentar yang berbau spam, kasar, menghina, seluruhnya yang bersifat menghancurkan bukan membangun tidak akan ditampilkan. Silahkan bertanya dan memberi pendapat dengan sopan dan sesuai aturan.

Anda diperbolehkan mempublikasikan ulang artikel ini, dengan syarat:
1. Mintalah izin dengan cara berkomentar di bawah artikel ini
2. Wajib menyertakan link ke artikel ini dan menyertakan nama penulis

 
© Klikedukasi 2008 - 2013 | Design by Panembahan Satyapradana | 170p3x