prova a confrontare con questa soluzione:
Codice PHP:
function is_luhn_valid($str) {
if (strspn($str, "0123456789") != strlen($str)) {
return false;
}
$map = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 2, 4, 6, 8, 1, 3, 5, 7, 9);
$sum = 0;
$last = strlen($str) - 1;
for ($i = 0; $i <= $last; $i++) {
$sum += $map[$str[$last - $i] + ($i & 1) * 10];
}
return $sum % 10 == 0;
}