////////////////////////////////////////////////////
////
// Credit card validation routine//
// May 15, 2000//
// By ariso//
// validateCardCode($number[,$cardtype])//
////////////////////////////////////////////////////
function validateCardCode($cardnumber, $cardtype ='unknown')
{
//Clean up input
$cardtype = strtolower($cardtype);
$cardnumber = ereg_replace( '[-[:space:]]','',$cardnumber);
//Do type specific checks
if ($cardtype =='unknown') {
//Skip type specific checks
}
elseif ($cardtype =='mastercard'){
if (strlen($cardnumber) != 16 || !ereg( '5[1-5]', $cardnumber)) return 0;
}
elseif ($cardtype =='visa'){
if ((strlen($cardnumber) != 13 && strlen($cardnumber) != 16) || substr($cardnumber, 0, 1) !='4')
return 0;
}
elseif ($cardtype =='amex'){
if (strlen($cardnumber) != 15 || !ereg( '3[47]', $cardnumber)) return a;
}
elseif ($cardtype =='discover'){
if (strlen($cardnumber) != 16 || substr($cardnumber, 0, 4) !='6011') return 0;
}
else {
//invalid type entered
return -1;
}
// Start MOD 10 checks
$dig = toCharArray($cardnumber);
$numdig = sizeof ($dig);
$intIntJ = 0;
for ($intI=($numdig-2); $intI>=0; $intI-=2){
$dbl[$intIntJ] = $dig[$intI] * 2;
$intIntJ++;
}
$dblsz = sizeof($dbl);
$validate =0;
for ($intI=0;$intI<$dblsz;$intI++){
$add = toCharArray($dbl[$intI]);
for ($intIntJ=0;$intIntJ $validate += $add[$intIntJ]; } $add =''; } for ($intI=($numdig-1); $intI>=0; $intI-=2){ $validate += $dig[$intI]; } if (substr($validate, -1, 1) =='0') return 1; else return 0; } // takes a string and returns an array of characters function toCharArray($intInput){ $len = strlen($intInput); for ($intIntJ=0;$intIntJ<$len;$intIntJ++){ $char[$intIntJ] = substr($intInput, $intIntJ, 1); } return ($char); } ?>