Coder, Entrepreneur, Blogger, and Coffee Addict
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.
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";
}
}
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?
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!
Pingback: How SINs (and Credit Card Numbers) Are Validated :: Dammit Jim!
© 2011 All rights reserved
ISBN’s use checksums too