2013-08-23 80 views
0

我正在嘗試基於下面的這個「算法」創建一個函數。我基本上需要在一個var中傳遞一個字符串,然後讓它運行下面的函數。創建函數CheckDidget


校驗位計算如下:每個位置分配一個值;對於數字0到9,這是數字的值,對於字母A到Z,這是10到35,對於填充符<,這是0.然後將每個位置的值乘以它的權重;第一個位置的權重爲7,第二個權重爲3,第三個權重爲1,之後權重重複7,3,1等等。所有的值都加在一起,最終值的餘數除以10就是校驗位。

,所以如果我通過了以下內容:

乘數是基於字符串中的位置。第一個位置是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.

我只需要一點幫助,創建一個函數來處理一個字符串,它傳遞給它來運行這個公式。有關從何處開始的任何建議

回答

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. 
+0

令人驚歎..非常感謝!我假設我只需要創建一個關鍵值對,然後當我知道相當於該字母的數字時,我以某種方式使用它。你能告訴我在哪裏可以傳遞字母值嗎? – SBB