gpt4 book ai didi

php - LuhnCalc 和 bpay MOD10 版本 5

转载 作者:可可西里 更新时间:2023-11-01 13:21:32 28 4
gpt4 key购买 nike

我正在使用以下 PHP 代码计算 BPay 的 CRN:

<?php
function LuhnCalc($number) {
$chars = array_reverse(str_split($number, 1));
$odd = array_intersect_key($chars, array_fill_keys(range(1, count($chars), 2), null));
$even = array_intersect_key($chars, array_fill_keys(range(0, count($chars), 2), null));
$even = array_map(function($n) { return ($n >= 5)?2 * $n - 9:2 * $n; }, $even);
$total = array_sum($odd) + array_sum($even);
return ((floor($total / 10) + 1) * 10 - $total) % 10;
}
print LuhnCalc($_GET['num']);
?>

不过,BPAY 似乎是 MOD 10 的第 5 版,我找不到关于它的任何文档。好像和MOD10不太一样。

测试了以下数字:

2005,1597,3651,0584,9675

bPAY
2005 = 20052
1597 = 15976
3651 = 36514
0584 = 05840
9675 = 96752

MY CODE
2005 = 20057
1597 = 15974
3651 = 36517
0584 = 05843
9675 = 96752

如您所见,它们都与 BPAY 号码不匹配。

最佳答案

此 PHP 函数将根据 mod10 版本 5 算法生成 BPay 引用号。

谁知道为什么 BPay 不能将此添加到他们的网站。我只是通过谷歌搜索找到被称为“MOD10V05”而不是“Mod 10 版本 5”的算法来找到解释。

function generateBpayRef($number) {

$number = preg_replace("/\D/", "", $number);

// The seed number needs to be numeric
if(!is_numeric($number)) return false;

// Must be a positive number
if($number <= 0) return false;

// Get the length of the seed number
$length = strlen($number);

$total = 0;

// For each character in seed number, sum the character multiplied by its one based array position (instead of normal PHP zero based numbering)
for($i = 0; $i < $length; $i++) $total += $number{$i} * ($i + 1);

// The check digit is the result of the sum total from above mod 10
$checkdigit = fmod($total, 10);

// Return the original seed plus the check digit
return $number . $checkdigit;

}

关于php - LuhnCalc 和 bpay MOD10 版本 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11024309/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com