Thursday, July 4, 2013

Credit Card Validation.

Mod10 Check tutorial


Mod 10 Check Example and Tutorial
SUM
STEP 1
4
0
1
1
5
0
1
0
3
6
8
5
3
3
3
7
STEP 2
8
0
2
1
10
0
2
0
6
6
16
5
6
3
6
7
STEP 3
8
0
2
1
1+0
0
2
0
6
6
1+6
5
6
3
6
7
STEP 4
8
0
2
1
1
0
2
0
6
6
7
5
6
3
6
7
60
EXPLANATION
STEP 1
 Write the no to be mod 10 checked
STEP 2
Double every 2nd digit from the Right last
STEP 3
Sum=60 Add the double and make it single digit and then add all the digit
STEP 4
If the result eg.60 is in muliples of 10 then its Valid.

Javascript For Credit Card Validation

function Mod10(ccNumb) {  // v2.0
            var valid = "0123456789"  // Valid digits in a credit card number
            var len = ccNumb.length;  // The length of the submitted cc number
            var iCCN = parseInt(ccNumb);  // integer of ccNumb
            var sCCN = ccNumb.toString();  // string of ccNumb
            sCCN = sCCN.replace(/^\s+|\s+$/g, '');  // strip spaces
            var iTotal = 0;  // integer total set at zero
            var bNum = true// by default assume it is a number
            var bResult = false// by default assume it is NOT a valid cc
            var temp;  // temp variable for parsing string
            var calc;  // used for calculation of each digit
            // Determine if the ccNumb is in fact all numbers
            for (var j = 0; j < len; j++) {
                temp = "" + sCCN.substring(j, j + 1);
                if (valid.indexOf(temp) == "-1") { bNum = false; }
            }
// if it is NOT a number, you can either alert to the fact, or just pass a failure
            if (!bNum) {
 /*alert("Not a Number");*/
                bResult = false;
            }
            // Determine if it is the proper length
            if ((len == 0) && (bResult)) {  
// nothing, field is blank AND passed above # check
                bResult = false;
            } else {  
// ccNumb is a number and the proper length - let's see if it is a valid card number
                if (len >= 15) {  // 15 or 16 for Amex or V/MC
                    for (var i = len; i > 0; i--) {  // LOOP throught the digits of the card
                        calc = parseInt(iCCN) % 10;  // right most digit
                        calc = parseInt(calc);  // assure it is an integer
                        iTotal += calc;  
// running total of the card number as we loop - Do Nothing to first digit
                        i--;  
// decrement the count - move to the next digit in the card
                        iCCN = iCCN / 10;                               
// subtracts right most digit from ccNumb
                        calc = parseInt(iCCN) % 10;    
// NEXT right most digit
                        calc = calc * 2;                                 
// multiply the digit by two
/* Instead of some screwy method of converting 16 to a string and then parsing 1 and 6 and then adding them to make 7,*/
// I use a simple switch statement to change the value of calc2 to 7 if 16 is the multiple.
                     switch (calc) {
                         case 10: calc = 1; break;       //5*2=10 & 1+0 = 1
                         case 12: calc = 3; break;       //6*2=12 & 1+2 = 3
                         case 14: calc = 5; break;       //7*2=14 & 1+4 = 5
                         case 16: calc = 7; break;       //8*2=16 & 1+6 = 7
                         case 18: calc = 9; break;       //9*2=18 & 1+8 = 9
                         default: calc = calc;//4*2= 8 &   8 = 8  -same for all lower numbers
                        }
                        iCCN = iCCN / 10;  // subtracts right most digit from ccNum
                        iTotal += calc;  // running total of the card number as we loop
                    }  // END OF LOOP
                    if ((iTotal % 10) == 0) {  // check to see if the sum Mod 10 is zero
                        bResult = true// This IS (or could be) a valid credit card number.
                    } else {
                        bResult = false// This could NOT be a valid credit card number
                    }
                }
            }
            // change alert to on-page display or other indication as needed.
            // if(bResult) {
            // alert("This IS a valid Credit Card Number!");
            // }
            // if(!bResult){
            // alert("This is NOT a valid Credit Card Number!");
            // }
            return bResult; // Return the results
        }

No comments:

Post a Comment