Step 2 but without looping back through the number. This is so that the original values can be used again in Build an ArrayList which will contain the alternating digits.The code includes comments that explains how it works, however, here is a summary. Perform the final calculation, if the sum Mod 10 results in 0 then // it's valid, otherwise its false. OriginalSum = OriginalSum + Int32.Parse(cardNumber.ToString()) add count to each digit for ( int x = 0 x = 0 y = y - 2) Int _numLength = (( int)CheckNumbers).ToString().Length Int CheckSum = 0 // Will hold the total sum of all checksum digits // Second stage, add separate digits of all products for ( int iCount = 0 iCount 9) Now read the contents at each index, this // can then be stored as an array of integers // Double the number returnedĬheckNumbers.Add( Int32.Parse(cardNumber.ToString())*2 ) Loop through starting at the end for ( int i = CardLength-2 i >= 0 i = i - 2) Double the value of alternate digits, starting with the second digit // from the right, i.e. So, get length of card int CardLength = cardNumber.Length Private static bool ValidateCardNumber( string cardNumber ) The code for Luhn's formula is in the ValidateCardNumber method By deriving the new validatorĬontrol from BaseValidator it's possible to produce a control whichīehaves exactly as any other validator for the easiest deployment. This will be converted into a method which will perform all of the steps listedĪbove on the contents of the specified textbox. We'll still start from the right, but this time we'll startįinally, we'll add both the results and divide the answer by 10.Ħ0 is evenly divided by 10, so the credit card number is well formed and Now we'll go back to the original number and add all the digits that Now we'll the separate digits of all the products, and come up with Rightmost number 7, double it, and then do the same for every other digit.Īdd the separate digits of all the products The first step is to double each of the alternating digits in the number.īut the trick is to start with the second digit from the right and work backwards. Of the formula can be found on WebOpedia but so you don't have to read that * These are UK only cards from my recollection, but have been tested by myself It can be used to check against a number of cards, including the following: Of the textbox using Luhn's formula which is used to validate card numbers. The CreditCardValidator control will perform a check on the contents So firstly a little bit of background information and a demo of how the validation The main way the card number is going to be validated is through Luhn's formula, The validation is set by the ValidateCardType property. Implements this is IsValidCardType, and whether this is used during Level of control can be added - the types of card to accept. The card type can be determined throughĪ prefix and each type has a specified length, by examining these an additional Through checking the card number using Luhn's formula, the details of whichĪre included in the next part of the article. The control includes support for validating card numbers in two ways. Which is used to specify what types of card should pass the validation using Third incarnation of the control is the AcceptedCardTypes property To the more specialised CreditCardValidator class. For those who are not familiar with UML, it showsĪ specialisation relationship between the BaseValidator and CreditCardValidatorĬlasses - an is a relationship - demonstrating inheritance from BaseValidator The diagram is missing information about parameter types since its not essential You ever wanted to know about CC's guide.īefore getting into any of the implementation details here is a simple UMLĬlass diagram to show the rough layout of the Control. Payment gateway assembly) at the following address: ,īesides this you may also be interested in the everything Incidentally, you can see a demo of the validator in use (as well as the card This is the result, a drop-in replacementįor any of the other validation controls. To include support for checking that the card number was valid before issuingĪ request to the payment gateway's server. (and received some very generous donations from CP members - thanks guys :).Īs part of this web form I wanted to include support to check that users hadĮntered a card number, expiration date etc., and then wanted to extend it further To produce a simple web form to test it out, and so opened it up for all comers Once I had got a basic version working I decided Library project (includes binary) - 10 KbĪ while ago I started working on converting an eCommerce payment gateway'sĪssembly using their XML API.
0 Comments
Leave a Reply. |