bux23
12/14/2017 - 10:53 AM

luhn functions

luhn functions for js and php

function checkluhn(cNum) {
  var arr = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],
      len = cNum.length,
      bit = 1,
      sum = 0,
      val;

  while (len) {

    val = parseInt(cNum.charAt(--len), 10);
    sum += (bit ^= 1) ? arr[val] : val;
  }

  return sum && sum % 10 === 0;
}
luhnTasks = {};

luhnTasks.calculate = function(originalStr){

	var sum=0, delta=[0,1,2,3,4,-4,-3,-2,-1,0], 
	deltaIndex, deltaValue;

	for (var i=0; i<originalStr.length; i++ ){
		sum += parseInt(originalStr.substring(i,i+1));
	}

	for (var i=originalStr.length-1; i>=0; i-=2){		
		sum += delta[parseInt(originalStr.substring(i,i+1))];
	}	

	if (10-(sum%10)===10){ return 0; }
	return 10-(sum%10);

};

luhnTasks.validate = function(luhnStr){

	var luhnStrDigit, luhnStrLess;

	luhnStrDigit = parseInt(luhnStr.substring(luhnStr.length-1,luhnStr.length));
	luhnStrLess = luhnStr.substring(0,luhnStr.length-1);

	if (this.calculate(luhnStrLess)===parseInt(luhnStrDigit)){ return true; }	
	return false;

};
function Luhn($number, $iterations = 1)
    {
        while ($iterations-- >= 1)
        {
            $stack = 0;
            $number = str_split(strrev($number), 1);

            foreach ($number as $key => $value)
            {
                if ($key % 2 == 0)
                {
                    $value = array_sum(str_split($value * 2, 1));
                }

                $stack += $value;
            }

            $stack %= 10;

            if ($stack != 0)
            {
                $stack -= 10;
            }

            $number = implode('', array_reverse($number)) . abs($stack);
        }

        return $number;
    }

    function Luhn_Verify($number, $iterations = 1)
    {
        $result = substr($number, 0, - $iterations);

        if ($this->Luhn($result, $iterations) == $number)
        {
            return $result;
        }

        return false;
    }