Qué código tan sencillo, nunca me hubiera imaginado que sólo era cuestión de sumar los 16 números, con una ligera excepción en los impares.
Me he quedado con la boca abierta, vaya que es útil el código p' no tener que dejarle todo al banco. Incluso desde Javascript sería factible validarlo, dejo una función que me sirvió para ver si esto del algoritmo era cierto, probé todas las tarjetas que me encontré por ahí, incluso unas de varios años atrás y que ya caducaron. Con todas funcionó.
Código PHP:
<?
function is_valid_card($card_number){
$suma = 0;
for($i=0;$i<16;$i++)
if($i % 2) $suma += $card_number[$i]; //par
else //impar
if($card_number[$i]!=9) $suma += 2*$card_number[$i] % 9;
else $suma += 9;
if($suma%10==0 && $suma < 150) return true;
return false;
}//end function
?>