<?php
//////////////////////////////////////////////////// // // // 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<sizeof($add);$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); }
?> |