我正在尝试根据下面的“算法”创建一个函数。我基本上需要在单个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。
我只需要一些帮助就可以创建一个函数来处理它传递给它的方程式的字符串。关于从哪里开始的任何建议
答案 0 :(得分: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.