If you ever need to validate credit card numbers, here is a simple validator class. Of course you can use it as simple as just defining validation rules in one array and use the php biult-in preg_match function to validate. But for the sake of good OOP practice, we need a class ๐ . Well, i hope that this will help you. So, first we create the validator class:
setCreditCardRules();
}
/**
* Set the rules for credit card validation
*
* @author [email protected]
* @since May 2, 2012
*/
private function setCreditCardRules()
{
$this->rules['creditCard'] = array(
'amex' => '/^3[4|7]\\d{13}$/',
'bankcard' => '/^56(10\\d\\d|022[1-5])\\d{10}$/',
'diners' => '/^(?:3(0[0-5]|[68]\\d)\\d{11})|(?:5[1-5]\\d{14})$/',
'disc' => '/^(?:6011|650\\d)\\d{12}$/',
'electron' => '/^(?:417500|4917\\d{2}|4913\\d{2})\\d{10}$/',
'enroute' => '/^2(?:014|149)\\d{11}$/',
'jcb' => '/^(3\\d{4}|2100|1800)\\d{11}$/',
'maestro' => '/^(?:5020|6\\d{3})\\d{12}$/',
'mc' => '/^5[1-5]\\d{14}$/',
'solo' => '/^(6334[5-9][0-9]|6767[0-9]{2})\\d{10}(\\d{2,3})?$/',
'switch' => '/^(?:49(03(0[2-9]|3[5-9])|11(0[1-2]|7[4-9]|8[1-2])|36[0-9]{2})' .
'\\d{10}(\\d{2,3})?)|(?:564182\\d{10}(\\d{2,3})?)|(6(3(33[0-4]' .
'[0-9])|759[0-9]{2})\\d{10}(\\d{2,3})?)$/',
'visa' => '/^4\\d{12}(\\d{3})?$/',
'voyager' => '/^8699[0-9]{11}$/',
'fast' => '/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3' .
'(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/'
);
}
/**
* Get available rules for credit card validation. In case you need
* them to pass to another object(s) and you don't want to use
* the validator
*
* @author [email protected]
* @since May 2, 2012
* @return array
*/
public function getCreditCardRules()
{
return $this->rules['creditCard'];
}
/**
* The validator
*
* @author [email protected]
* @since May 2, 2012
* @param string $cardType Card type as defined in setCreditCardRules()
* @param numeric $cardNumber Credit card number
* @throws \Exception
*/
public function isValid($cardType, $cardNumber)
{
if(!isset($this->rules['creditCard'][$cardType]))
{
throw new \Exception('Invalid card type');
}
return preg_match($this->rules['creditCard'][$cardType], $cardNumber);
}
}
?>
Easy, no ? Using it is very, very simple:
isValid($cardType, $cardNumber))
{
echo 'Credit card number is valid';
}
else
{
echo 'Invalid credit card number';
}
?>
Hope it is useful for you. Cheers !