spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com

home / programming / javascript / practical / chap10 current pageTo page 2To page 3To page 4To page 5
[next]

Practical JavaScript for the Usable Web

Developer News
OpenOffice 3.2 Lands Amid Critical Changes
Red Hat, IBM Firmly in KVM Virtualization Camp
Red Hat Talks Up Open Source Cloud Plans

Validating a Credit Card Number

[Editor's note: the example code discussed in this excerpt is targeted to version 4 or later Web browsers.]

Our final validation method checks whether a credit card number could be a valid card number. Note that I say "could be" rather than "is"--just because the number is valid, doesn't mean that the card has been allocated or that it has not been canceled, if it was allocated. Only server-side processing can possibly validate a card number. However, what we can do here is check that the user hasn't made an accidental mistake so that we can get them to rectify any mistakes before we attempt server-side checks.

As we'll see shortly, validating a credit card is much more complex than any of the validation methods we have created so far. There are three checks we can perform client-side:

We'll be using all three of these checks in our method (below, and see the Editor's note on page 5).


Validate.prototype.isValidCreditCardNumber = function(cardNumber, cardType) 
{
   var isValid = false;
   var ccCheckRegExp = /[^\d ]/;
   isValid = !ccCheckRegExp.test(cardNumber);

   if (isValid)
   {
     var cardNumbersOnly = cardNumber.replace(/ /g,"");
     var cardNumberLength = cardNumbersOnly.length;
     var lengthIsValid = false;
     var prefixIsValid = false;
     var prefixRegExp;
     switch(cardType)
     {
       case "mastercard":
         lengthIsValid = (cardNumberLength == 16);
         prefixRegExp = /^5[1-5]/;
         break;
       case "visa":
         lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
         prefixRegExp = /^4/;
         break;
       case "amex":
         lengthIsValid = (cardNumberLength == 15);
         prefixRegExp = /^3(4|7)/;
         break;
       default:
         prefixRegExp = /^$/;
         alert("Card type not found");
     }
     prefixIsValid = prefixRegExp.test(cardNumbersOnly);
     isValid = prefixIsValid && lengthIsValid;
   }
   if (isValid)
   {
     var numberProduct;
     var numberProductDigitIndex;
     var checkSumTotal = 0;
     for (digitCounter = cardNumberLength - 1;
       digitCounter >= 0;
       digitCounter--)
     {
       checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
       digitCounter--;
       numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
       for (var productDigitCounter = 0;
         productDigitCounter < numberProduct.length;
         productDigitCounter++)
       {
         checkSumTotal +=
           parseInt(numberProduct.charAt(productDigitCounter));
       }
     }
     isValid = (checkSumTotal % 10 == 0);
   }
   return isValid;
}

home / programming / javascript / practical / chap10 current pageTo page 2To page 3To page 4To page 5
[next]


The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers

webref The latest from WebReference.com Browse >
Search Engine Optimization: Selecting and Embedding Keywords · Are Google's Language Translation Web Services Ready for Prime Time? · Installing and Using Meeplace, the Business Review CMS
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
IBM DB2 10 for z/OS: Justifying the Upgrade · Living La Vida Colo: Choosing the Right Colocation Facility · FTC Concerns over Social Media Privacy Linger

Created: April 15, 2002
Revised: April 19, 2002


URL: http://webreference.com/programming/javascript/practical/chap10/