Luhn test of credit card numbers: Difference between revisions

Content added Content deleted
(Simplified D code)
(→‎{{header|PHP}}: different version)
Line 1,155: Line 1,155:


=={{header|PHP}}==
=={{header|PHP}}==
{{trans|C}}
<lang php>function luhn($num){
<lang php>$numbers = "49927398716 49927398717 1234567812345678 1234567812345670";
$sum = 0;
foreach (split(' ', $numbers) as $n)
$alt = false;
echo "$n is ", luhnTest($n) ? 'valid' : 'not valid', '</br>';
for ($i = strlen($num)-1; $i>=0; $i--){

$n = substr($num,$i,1);
function luhnTest($num) {
if($alt){
$len = strlen($num);
$n *= 2;
$n -= ($n > 9) ? 9 : 0;
for ($i = $len-1; $i >= 0; $i--) {
$ord = ord($num[$i]);
}
if (($len - 1) & $i) {
$sum += $n;
$alt = !$alt;
$sum += $ord;
} else {
}
$sum += $ord / 5 + (2 * $ord) % 10;
return ($sum%10==0);
}
}
return $sum % 10 == 0;
}</lang>
}</lang>

<pre>49927398716 is valid
49927398717 is not valid
1234567812345678 is not valid
1234567812345670 is valid</pre>


=={{header|PicoLisp}}==
=={{header|PicoLisp}}==