作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用以下 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/
我正在使用以下 PHP 代码计算 BPay 的 CRN: = 5)?2 * $n - 9:2 * $n; }, $even); $total = array_sum($odd) + array_s
我是一名优秀的程序员,十分优秀!