Click here to Skip to main content
15,884,176 members
Articles / Security
Tip/Trick

Validate credit card number with Mod 10 algorithm

Rate me:
Please Sign up or sign in to vote.
4.98/5 (23 votes)
15 Jan 2013CPOL3 min read 321.1K   3.2K   33   31
Article provides details about Mod 10 algorithm and how to validate a credit card number with mod 10 algorithm using C#.

Introduction

All you know what information contains in your NIC number. But do you know what information contains in the Credit Card Number? Following article provides brief details about what information contain in your credit card and demonstrates to how to validate credit card number using mod 10 (Luhn) algorithms with C#.

Background 

Card Length 

Typically, credit card numbers are all numeric and the length of the credit card number is between 12 digits to 19 digits. 

  • 14, 15, 16 digits – Diners Club
  • 15 digits – American Express
  • 13, 16 digits – Visa
  • 16 digits - MasterCard  

For more information please refer http://en.wikipedia.org/wiki/Bank_card_number.

Hidden information

  1.  Major Industry Identifier (MII) 
  2. The first digit of the credit card number is the Major Industry Identifier (MII). It designates the category of the entry which issued the card.    

    • 1 and 2 – Airlines 
    • 3 – Travel
    • 4 and 5 – Banking and Financial
    • 6 – Merchandising and Banking/Financial
    • 7 – Petroleum
    • 8 – Healthcare, Telecommunications
    • 9 – National Assignment 
  3. Issuer Identification Number 
  4. The first 6 digits are the Issuer Identification Number. It will identify the institution that issued the card. Following are some of the major IINs. 

  5. Amex – 34xxxx, 37xxxx 
  6. Visa – 4xxxxxx 
  7. MasterCard – 51xxxx – 55xxxx 
  8. Discover – 6011xx, 644xxx, 65xxxx 
  9. Account Number 
  10. Taking away the 6 identifier digits and the last digits, remaining digits are the person’s account number (7th and following excluding last digits) 

  11. Check digits   

Last digit is known as check digits or checksum. It is used to validate the credit card number using Luhn algorithm (Mod 10 algorithm). 

For more information refer: http://en.wikipedia.org/wiki/Bank_card_number and http://en.wikipedia.org/wiki/List_of_Issuer_Identification_Numbers.

Luhn algorithm (Mod 10)  

The Luhn algorithm or Luhn formula, also known as the “modulus 10″ or “mod 10″ algorithm, is a simple checksum formula used to validate a variety of identification numbers, such as credit card numbers, IMEI numbers, National Provider Identifier numbers in US and Canadian Social Insurance Numbers. It was created by IBM scientist Hans Peter Luhn. (http://en.wikipedia.org/wiki/Luhn_algorithm)

When you implementing eCommerce application, It is a best practice validating credit card number before send it to the bank validation.

Here are the Luhn steps which can used to validate the credit card number. 

4 0 1 2 8 8 8 8 8 8 8 8 1 8 8 1  

Step 1 - Starting with the check digit double the value of every other digit (right to left every 2nd digit)  

Step 2 - If doubling of a number results in a two digits number, add up the digits to get a single digit number. This will results in eight single digit numbers.

Step 2 

Step 3 - Now add the un-doubled digits to the odd places

 

Step 4 - Add up all the digits in this number

If the final sum is divisible by 10, then the credit card number is valid. If it is not divisible by 10, the number is invalid. 

Using the code   

Following code sample validates your credit card number against Mod 10. 

C#
public static bool Mod10Check(string creditCardNumber)
{
    //// check whether input string is null or empty
    if (string.IsNullOrEmpty(creditCardNumber))
    {
        return false;
    }

    //// 1.	Starting with the check digit double the value of every other digit 
    //// 2.	If doubling of a number results in a two digits number, add up
    ///   the digits to get a single digit number. This will results in eight single digit numbers                    
    //// 3. Get the sum of the digits
    int sumOfDigits = creditCardNumber.Where((e) => e >= '0' && e <= '9')
                    .Reverse()
                    .Select((e, i) => ((int)e - 48) * (i % 2 == 0 ? 1 : 2))
                    .Sum((e) => e / 10 + e % 10);


    //// If the final sum is divisible by 10, then the credit card number
    //   is valid. If it is not divisible by 10, the number is invalid.            
    return sumOfDigits % 10 == 0;            
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead Eyepax IT Consulting (Pvt) Ltd.
Sri Lanka Sri Lanka
Having more than 9 year hands-on industry experience in software development
Responsible for designing, implementing and managing complex software systems with stringent up-time requirement.

Visit my blog

Comments and Discussions

 
Questionzip code Pin
Member 1494849625-Sep-20 2:08
Member 1494849625-Sep-20 2:08 
QuestionOne less LINQ step? Pin
Member 804625111-Sep-18 11:12
Member 804625111-Sep-18 11:12 
AnswerRe: One less LINQ step? Pin
Member 1181617711-Sep-18 22:17
Member 1181617711-Sep-18 22:17 
GeneralRe: One less LINQ step? Pin
Member 804625112-Sep-18 10:09
Member 804625112-Sep-18 10:09 
QuestionCredit Card Validation Pin
Member 1325662321-Jun-17 19:28
Member 1325662321-Jun-17 19:28 
BugSo close, but wrong - you need to use the checksum correctly! Pin
Chaz.NYC28-Oct-16 8:58
Chaz.NYC28-Oct-16 8:58 
GeneralRe: So close, but wrong - you need to use the checksum correctly! Pin
Member 1270317420-Jun-17 2:07
Member 1270317420-Jun-17 2:07 
QuestionMy vote of 5 Pin
Member 1199207113-Oct-15 10:22
Member 1199207113-Oct-15 10:22 
AnswerRe: My vote of 5 Pin
Tharaka MTR15-Oct-15 7:24
professionalTharaka MTR15-Oct-15 7:24 
QuestionGood job bro.. Pin
HBK_SHAAN19-Aug-15 7:11
HBK_SHAAN19-Aug-15 7:11 
AnswerVB.Net version Pin
kozchris12-Feb-15 6:23
kozchris12-Feb-15 6:23 
AnswerValidation and the Law Pin
SlaveDrivinBoss12-Dec-14 11:42
SlaveDrivinBoss12-Dec-14 11:42 
GeneralRe: Validation and the Law Pin
Member 300191019-Dec-14 11:31
Member 300191019-Dec-14 11:31 
GeneralRe: Validation and the Law Pin
Member 1199207113-Oct-15 10:00
Member 1199207113-Oct-15 10:00 
GeneralRe: Validation and the Law Pin
Member 1270317425-Aug-16 3:04
Member 1270317425-Aug-16 3:04 
QuestionWhy do you need to subtract each digit by 48? Pin
Richard Hu12-Aug-14 21:13
Richard Hu12-Aug-14 21:13 
AnswerRe: Why do you need to subtract each digit by 48? Pin
Tharaka MTR13-Aug-14 8:34
professionalTharaka MTR13-Aug-14 8:34 
GeneralRe: Why do you need to subtract each digit by 48? Pin
Richard Hu13-Aug-14 15:00
Richard Hu13-Aug-14 15:00 
GeneralMy vote of 5 Pin
User 505364323-Jul-14 12:37
User 505364323-Jul-14 12:37 
GeneralRe: My vote of 5 Pin
Tharaka MTR23-Jul-14 21:52
professionalTharaka MTR23-Jul-14 21:52 
QuestionLamda Pin
majed samyal18-Sep-13 0:46
majed samyal18-Sep-13 0:46 
AnswerRe: Lamda Pin
Tharaka MTR18-Sep-13 23:50
professionalTharaka MTR18-Sep-13 23:50 
QuestionDistinction Between Frequent Flyer and Credit Cards Pin
Predrag Kos5-Jun-13 2:45
Predrag Kos5-Jun-13 2:45 
QuestionMy vote 5 Pin
Yaseer Arafat1-Jun-13 11:46
professionalYaseer Arafat1-Jun-13 11:46 
AnswerRe: My vote 5 Pin
Tharaka MTR2-Jun-13 2:15
professionalTharaka MTR2-Jun-13 2:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.