> 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