> Hi, how i can check credit card or magnetic card number for
> a site of
> electronic commerce that i have to design.
>
> Sorry for my english.
>
> Pedro.
>
I think this should work for you, but it's not production tested yet.
-Craig
function verifyCC($name='', $type='', $number='', $expmonth='',
$expyear='') {
//make sure all fields are filled in
if (empty($name) || empty($type) || empty($number) || empty($expyear)
|| empty($expmonth)) {
return FALSE;
}
//verify month makes sense
if(!is_numeric($expmonth) || $expmonth < 1 || $expmonth > 12) {
return FALSE;
}
// Get the current year
$currentYear = date('Y');
expyear = '20' . $expyear;
settype($currentYear, 'integer');
//verify year makes sense
if (!is_numeric($expyear) || $expyear < $currentYear || $expyear >
$currentYear + 10) {
return FALSE;
}
//strip out non-numeric numbers from number
$number = preg_replace('/[^0-9]/', '', $number);
$type = strtolower($type);
//check length and prefix of number
if ($type == 'mastercard' || $type == 'mc') {
$validFormat = ereg("^5[1-5][0-9]{14}$", $number);
}
elseif ($type == 'visa') {
$validFormat = ereg("^4[0-9]{12}([0-9]{3})?$", $number);
}
elseif ($type == 'amex' || $type == 'american express') {
$validFormat = ereg("^3[47][0-9]{13}$", $number);
}
elseif ($type == 'diners club' || $type == 'dc' || $type = 'diners')
{
$validFormat = ereg("^3(0[0-5]|[68][0-9])[0-9]{11}$", $number);
}
elseif ($type == 'discover' || $type == 'disc') {
$validFormat = ereg("^6011[0-9]{12}$", $number);
}
elseif ($type == 'jcb') {
$validFormat = ereg("^(3[0-9]{4}|2131|1800)[0-9]{11}$", $number);
}
else {
return FALSE;
}
if (!$validFormat) {
return FALSE;
}
//do mod 10 algorithm
$revNum = strrev($number);
$sum = 0;
for($i = 0; $i < strlen($revNum); $i++) {
$currentNum = substr($revNum, $i, 1);
//double every second digit
if($i % 2 == 1) {
$currentNum *= 2;
}
//add digits of 2-digit numbers together
if($currentNum > 9) {
$firstNum = $currentNum % 10;
$secondNum = ($currentNum - $firstNum) / 10;
$currentNum = $firstNum + $secondNum;
}
$sum += $currentNum;
}
//check if there's a remainder
if ($sum % 10 <> 0) {
return FALSE;
}
return TRUE;
}
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php