Test Credit Card Numbers

A while back now I had to write a system to process credit cards. Since the software was capturing the card number itself it could perform some initial checking on the number to ensure that the user hadn’t made a trivial typing error.

Apart from checking you have the appropriate number of digits for the card the easiest check to do is called the Luhn check (aka mod-10 or modulus 10). Technically the Luhn algorithm is a hash function but it should not be considered secure, instead it is useful for catching simple data entry problems. 

The Luhn algorithm works like this:

  1. Write down the number to test placing each digit in a separate column.
  2. Starting at the right hand end double every other number (shown in bold).
  3. Add together the digits of all the numbers in step 2 (e.g. 14=1+4=5). Then add together all the digits. Write the result in the last column.
  4. If the total in step 3 ends with a zero (e.g. the total modulo 10 = 0, hence the name) the number passes the test.
Step 1 3 7 8 2 8 2 2 4 6 3 1 0 0 0 5
Step 2 3 14 8 4 8 4 2 8 6 6 1 0 0 0 5
Step 3 3 5 8 4 8 4 2 8 6 6 1 0 0 0 5 60

The last digit (5 in this example) is called the check digit. When the bank is generating a credit card number this is the digit they have to tweak in order to make the over all number pass the Luhn check. The way the check digit is calculated is very similar to the check calculation except in step three the result (which would be 55 in the example) is multiplied by 9 to give 495. The last digit of the result (e.g. 5) is the check digit.

Different credit cards have different numbers of digits and they start with different codes. For example Visa cards always start with a 4. In order to properly test a payment system therefore you need some valid numbers that won’t get tested. The table¬†below lists some that are commonly used.

Card Type Card Number
American Express 378282246310005
American Express 371449635398431
American Express Corporate 378734493671000
Australian BankCard 5610591081018250
Diners Club 30569309025904
Diners Club 38520000023237
Discover 6011111111111117
Discover 6011000990139424
JCB 3530111333300000
JCB 3566002020360505
MasterCard 5555555555554444
MasterCard 5105105105105100
Visa 4111111111111111
Visa 4012888888881881
Visa 4222222222222
Posted in Miscellaneous and tagged .

Leave a Reply

Your email address will not be published. Required fields are marked *