验证Luhn校验和有很多实现,但很少用于生成它们.我遇到过这个,但是在我的测试中它发现它是错误的,我不理解delta变量背后的逻辑.
我已经创建了这个应该生成Luhn校验和的函数,但由于某些原因我还没有理解生成的校验和在一半时间内是无效的.
function Luhn($number, $iterations = 1)
{
while ($iterations-- >= 1)
{
$stack = 0;
$parity = strlen($number) % 2;
$number = str_split($number, 1);
foreach ($number as $key => $value)
{
if ($key % 2 == $parity)
{
$value *= 2;
if ($value > 9)
{
$value -= 9;
}
}
$stack += $value;
}
$stack = 10 - $stack % 10;
if ($stack == 10)
{
$stack = 0;
}
$number[] = $stack;
}
return implode('', …Run Code Online (Sandbox Code Playgroud)