Validating Credit Card Numbers with Zend Framework

Ever wonder how websites can tell you made a mistake entering your credit card number before you even submit it? Like most identification numbers credit cards have checksum digits built into them. Just like barcodes.

If you ever look at a EAN-13 UPC barcode (on all retail products) you will notice there is a digit outside of the regular set on the right. If any digit is out of order or mistyped you can tell that the barcode is wrong based on this checksum. It also allows barcode readers the ability to “guess” what the barcode if part of the barcode got riped or damaged. This is also how PAR files can repair corrupt damaged or even missing files.

Credit cards use a checksum algorithm called the, Luhn Algorithm, invented by Hans Peter Luhn. This simple algorithm can check to see if a credit card number was accidentally mistyped. This is what Zend Framework uses as well.

Validating Credit Card Numbers with Zend Framework

 
Here is a quick validation using Zend Framework:

$validator = new Zend_Validate_Ccnum();
        if ($validator->isValid('8181876154321')) {
            echo 'valid';
        } else {
            // email is invalid; print the reasons
            foreach ($validator->getMessages() as $message) {
                echo "$message\n";
            }
        }

Was this information useful?


6 Responses to "Validating Credit Card Numbers with Zend Framework"
  1. Jade Robbins on November 21st, 2008

    ISBN’s use checksums too :D

  2. will on January 5th, 2009

    the Zend framework (as of 1.7) does not know what cc type you entered.
    Below are the regular expressions that determine the card type. I’m still learning how ZF really comes together, but I know these expressions are tried and true.

    Visa = /^\4[0-9]{12}([0-9]{3})?$/x

    MasterCard = /^\5[0-9]{15}$/x

    Does anyone know of a way to make the ZF work with a payment gateway?

  3. Mark Sanborn on January 5th, 2009

    The only problem with this is that it doesn’t use the Luhn Algorithm.

  4. will on January 5th, 2009

    Right…
    The luhn check confirms the card number is valid.
    The regular expressions I provided are simply meant as a method of detecting the card type.

    Never process a card without running the luhn check against it!

  5. Mark Sanborn on January 5th, 2009

    Ahh, sorry I was thinking you were suggesting the regex as a replacement to the Zend functions. I will look into the Zend framework later tonight tommorow and see if I can get it to tell me what type of card was ran.

    You can usually tell by the first couple of digits on the number sequence.

  6. [...] A while back it was tax season in Canada and a friend of mine was trying to do his taxes online. But since he was foreign and didn’t have a Social Insurance Number (their equivalent of an SSN), the helpful webapp wouldn’t let him print the thing (of course it only informed him of that after he had already entered everything). We tried a few guesses before finally just using mine and crossing out my numbers after printing it. But I always wondered how the form knew our guesses were invalid. Luckily, I recently stumbled across a mention of how credit card numbers are validated. [...]