0

我正在尝试根据下面的“算法”创建一个函数。我基本上需要在单个 var 中传递一个字符串,然后让它运行下面的函数。


校验位计算如下:每个位置都赋值一个;对于数字 0 到 9,这是数字的值,对于字母 A 到 Z,这是 10 到 35,对于填充符 <,这是 0。然后将每个位置的值乘以其权重;第一个位置的权重是 7,第二个位置的权重是 3,第三个位置的权重是 1,然后权重重复 7、3、1 等。所有值加在一起,最终值除以 10 的余数是校验位。

所以如果我通过了以下内容:

057607332

乘数基于字符串中的位置。第一个位置是7,第二个是3,第三个是1,然后重复;731、731等

所以:

0 * 7

5*3

7 * 1

6 * 7

0 * 3

7 * 1

3 * 7

3 * 3

2 * 1

总共是 103。你把它除以 10,你得到 10.3

所以返回的最终值将是余数,即 3。

我只需要一点帮助来创建一个函数来处理它传递的字符串以在其上运行这个方程。关于从哪里开始的任何建议

4

1 回答 1

2

您需要迭代输入字符串并单独查看每个字符。如果字符是数字,则使用数字的值,但如果是字母字符,则可以在定义的数组中查找字符的值,或者根据 ASCII 值进行一些计算特点。

通过在迭代变量上使用模数 (%) 来实现在 7、3、1 之间交替乘数。余数也使用模数确定。

这里是代码的核心。您只需要处理遇到字母字符时的逻辑。http://jsfiddle.net/swsKG/

/**
 * Takes an input string of digits and characters.
 * @param {string} input
 * @returns {int} The remainder.
 */
function calculate(input) {
    var multipliers = [7, 3, 1];
    var sum = 0;
    // Iterate each character in the input string.
    for(var i = 0; i < input.length; i++) {
        // Get the index position of the next multiplier, using modulus.
        var multiplierIndex = (i % multipliers.length);
        var multiplier = multipliers[multiplierIndex];
        var char = input[i];
        // Check if char is a digit or a character.
        // If it is a character, get the appropriate int value.
        if(isNaN(char)) {
            // Not a number, so get the correct value.
            alert(char);
        } else {
            // Add to the sum.
            sum += char * multiplier;   
        }
    }
    // Return the remainder.
    return sum % 10;
};

// Testing.
var result = calculate("057607332"); // Result is 3.
于 2013-08-23T04:50:47.413 回答