算法描述为:
1、从卡号最后一位数字开始,偶数位乘以2,如果乘以2的结果是是两位数,将结果减去9(可以理解为各位数相加)
2、把把有数字相加得到总和
3、看是否能被10整除,如果能,说明是合法的
php代码如下:
function LuhnValid($str)
{
$len = strlen($str);
$sum = 0;
for ($i = 0; $i < $len; $i++)
{
if (($i + $len) & 1)
{
$sum += ord($str[$i]) - ord('0');
}
else
{
$tmp = (ord($str[$i]) - ord('0')) * 2;
$sum += floor($tmp / 10) + $tmp % 10;
}
}
return $sum % 10 == 0;
}