Al realizar una aplicación de comercio electrónico es muy importante validar los distintos tipos de tarjetas de credito que hay, esta es una simple función para validarla, solo tiene que llamar a la función getTipoTarjeta(“4111 1111 1111 1111?);
function validarTarjeta($num_tarjeta)
{
$num_tarjeta = preg_replace(«/\D|\s/», «», $num_tarjeta);
$length = strlen($num_tarjeta);
$parity = $length % 2;
$sum=0;
for($i=0; $i<$length; $i++)
{
$digit = $num_tarjeta [$i] ;
if ($i%2==$parity) $digit=$digit*2;
if ($digit>9) $digit=$digit-9;
$sum=$sum+$digit;
}
return ($sum%10==0);
}
function getTipoTarjeta($cc)
{
$cards = array(
«visa» => «(4\d{12}(?:\d{3})?)»,
«amex» => «(3 [47] \d{13})»,
«jcb» => «(35 [2-8] [89] \d\d\d{10})»,
«maestro» => «((?:5020|5038|6304|6579|6761)\d{12}(?:\d\d)?)»,
«solo» => «((?:6334|6767)\d{12}(?:\d\d)?\d?)»,
«mastercard» => «(5 [1-5] \d{14})»,
«switch» => «(?:(?:(?:4903|4905|4911|4936|6333|6759)\d{12})|(?:(?:564182|633110)\d{10})(\d\d)?\d?)»,
);
$names = array(«Visa», «American Express», «JCB», «Maestro», «Solo», «Mastercard», «Switch»);
$matches = array();
$pattern = «#^(?:».implode(«|», $cards).»)$#»;
$result = preg_match($pattern, str_replace(» «, «», $cc), $matches);
if($result > 0)
{
$result = (validarTarjeta($cc))?1:0;
}
return ($result>0)?$names [sizeof($matches)-2] :false;
}
//ejm:
echo getTipoTarjeta(«4111 1111 1111 1111»);