05.05.2013 Views

Programming PHP

Programming PHP

Programming PHP

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Example 4-1. Credit-card validator (continued)<br />

function IsValidCreditCard($inCardNumber, $inCardType) {<br />

// Assume it's okay<br />

$isValid = true;<br />

// Strip all non-numbers from the string<br />

$inCardNumber = ereg_replace('[^[:digit:]]','', $inCardNumber);<br />

// Make sure the card number and type match<br />

switch($inCardType) {<br />

case 'mastercard':<br />

$isValid = ereg('^5[1-5].{14}$', $inCardNumber);<br />

break;<br />

}<br />

case 'visa':<br />

$isValid = ereg('^4.{15}$|^4.{12}$', $inCardNumber);<br />

break;<br />

case 'amex':<br />

$isValid = ereg('^3[47].{13}$', $inCardNumber);<br />

break;<br />

case 'discover':<br />

$isValid = ereg('^6011.{12}$', $inCardNumber);<br />

break;<br />

case 'diners':<br />

$isValid = ereg('^30[0-5].{11}$|^3[68].{12}$', $inCardNumber);<br />

break;<br />

case 'jcb':<br />

$isValid = ereg('^3.{15}$|^2131|1800.{11}$', $inCardNumber);<br />

break;<br />

// It passed the rudimentary test; let's check it against the Luhn this time<br />

if($isValid) {<br />

// Work in reverse<br />

$inCardNumber = strrev($inCardNumber);<br />

// Total the digits in the number, doubling those in odd-numbered positions<br />

$theTotal = 0;<br />

for ($i = 0; $i < strlen($inCardNumber); $i++) {<br />

$theAdder = (int) $inCardNumber{$i};<br />

// Double the numbers in odd-numbered positions<br />

if($i % 2) {<br />

$theAdder 9) { $theAdder -= 9; }<br />

}<br />

$theTotal += $theAdder;<br />

}<br />

102 | Chapter 4: Strings<br />

This is the Title of the Book, eMatter Edition<br />

Copyright © 2002 O’Reilly & Associates, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!