I use the following PHP code to calculate CRN for BPay:
<?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']); ?>
However, it looks like BPAY is version 5 of MOD 10 for which I cannot find any documentation. This seems to be not the same as MOD10.
The following numbers where tested:
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
As you can see, none of them match BPAY numbers.
source share