每个奇数和偶数位置的字符串

时间:2011-06-20 23:26:19

标签: javascript credit-card luhn

我对javascript一无所知。

假设字符串“3005600008000”,我需要找到一种方法将奇数位数中的所有数字乘以2,将偶数位数中的数字乘以1.

这个伪代码我为奇数写了输出(我认为)为TRUE(即“0”),

var camid;
var LN= camid.length;
var mychar = camid.charAt(LN%2);

var arr = new Array(camid);
for(var i=0; i<arr.length; i++) {
    var value = arr[i]%2;
    Alert(i =" "+value);
}

我不确定这是对的:我不相信它是在奇数(以及后来的偶数)位置分块/分割字符串。

我是怎么做到的?你能提供一些提示吗?

/=================================================/

我的目标是在网页中实现智能卡ID号的验证例程。

我试图实现的逻辑如下:

·1)从左边开始,将奇数位置的所有数字乘以2,偶数位置的数字乘以1.

·2)如果将单个数字乘以2的结果产生两位数字(例如“7 x 2 = 14”),则将结果的数字加在一起以产生新的单个数字结果(“1 + 4 = 5”)。

·3)将所有单位数结果加在一起。

·4)校验位是您必须添加到此结果中的金额才能达到下一个最高倍数10。例如,如果步骤#3中的总和为22,要达到下一个最高倍数10(即30),则必须将8添加到22.因此校验位为8。

这就是整个想法。谷歌搜索智能卡ID验证没有返回任何内容,我开始认为这在Javascript中做到这一点有点过分了......

欢迎任何输入。

3 个答案:

答案 0 :(得分:2)

var theArray = camid.split(''); // create an array entry for each digit in camid
var size = theArray.length, i, eachValue;
for(i = 0; i < size; i++) { // iterate over each digit
  eachValue = parseInt(theArray[i], 10); // test each string digit for an integer
  if(!isNaN(eachValue)) {
    alert((eachValue % 2) ? eachValue * 2 : eachValue); // if mod outputs 1 / true (due to odd number) multiply the value by 2. If mod outputs 0 / false output value
  }
}

答案 1 :(得分:2)

我发现我想要做的就是称为Luhn验证。

我在这里找到了算法。

http://sites.google.com/site/abapexamples/javascript/luhn-validation

感谢您抽出宝贵时间帮助我。非常感谢。

答案 2 :(得分:1)

看起来您可能正在构建Luhn验证。如果是这样,请注意你需要从RIGHT计算奇数/偶数而不是字符串的左边。