LuhnCalc and bpay MOD10 version 5

credit-card, luhn, payment, php

Solution

This PHP function will generate BPay reference numbers based on the mod10 version 5 algorithm.

Who knows why BPay can't add this to their website. I only found an explanation by googling finding the algorithm being called "MOD10V05" instead of "Mod 10 version 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;

}

Problem

I am using the following PHP code to calculate a 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 seems that BPAY is version 5 of MOD 10, for which I can't find any documentation. It seems to not be 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 the BPAY numbers.

Original source