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;
}