2017-04-24 12 views
1

我有下面的代码验证如果某些数字是有效利用LUHN算法模块10如何使用LUHN算法,我得到下一个校验位在JavaScript

function isCheckdigitCorrect(value) { 
// accept only digits, dashes or spaces 
    if (/[^0-9-\s]+/.test(value)) return false; 

    var nCheck = 0, nDigit = 0, bEven = false; 
    value = value.replace(/\D/g, ""); 

    for (var n = value.length - 1; n >= 0; n--) { 
    var cDigit = value.charAt(n), 
     nDigit = parseInt(cDigit, 10); 

    if (bEven) { 
     if ((nDigit *= 2) > 9) nDigit -= 9; 
    } 

    nCheck += nDigit; 
    bEven = !bEven; 
    } 

    return (nCheck % 10) == 0; 
} 

我需要产生下一个检查另一个函数数字实际上通过给出四位数字,所以第五位数字将是下一位数字校验和。

+0

_“我需要另一个功能” _我明白,但你可以发布你尝试过这么远吗? – evolutionxbox

+0

看看https://gist.github.com/DiegoSalazar/4075533 – M98

+0

@evolutionxbox我还没有尝试过任何东西,但我不知道如何实现这一点,其实我试过相同的功能,并修改了一点点,但没有它运气好! –

回答

1

通过修改当前的功能,这个我能得到下一个校验码:

function getCheckDigit(value) { 
    if (/[^0-9-\s]+/.test(value)) return false; 

    var nCheck = 0, nDigit = 0, bEven = true; 
    value = value.replace(/\D/g, ""); 

    for (var n = value.length - 1; n >= 0; n--) { 
    var cDigit = value.charAt(n), 
     nDigit = parseInt(cDigit, 10); 

    if (bEven) { 
     if ((nDigit *= 2) > 9) nDigit -= 9; 
    } 

    nCheck += nDigit; 
    bEven = !bEven; 
    } 
    return (1000 - nCheck) % 10; 
} 
+0

Perfecto!很高兴看到你第一次回答问题,你也可以接受你的答案作为正确的答案。堆栈溢出是一个开放的社区,这就是为什么我喜欢它。为你+1 – M98