2011-06-20 10 views
1

私はjavascriptについて何も知りません。奇数と偶数の位置ごとに文字列をチャンクします。

文字列「3005600008000」を想定すると、私は1

によって、私は出力を書いたこの擬似コードを偶数番号の位置に2によって奇数位置と数字のすべての桁数を乗算する方法を見つける必要があります私はそれが奇妙で文字列を分割/チャンキング(以降でも)位置だとは思わない:私はこれが正しいことを確認していない、奇数(すなわち「0」)のためにTRUE(私は思う)

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番号の検証ルーチンをWebページに実装することです。

次のように私が実装しようとしているロジックは次のとおりです。

・1)左から、1

で偶数番号の位置に2桁で奇数位置にあるすべての数字を掛けます

・2)1桁を2で乗算した結果が2桁の数字(たとえば「7 x 2 = 14」)になった場合は、結果の桁を加算して新しい1桁結果(「1 + 4 = 5」)。

・3)すべての1桁の結果を一緒に追加します。

・4)チェックデジットは、次の最も高い10の倍数に到達するためにこの結果に追加する必要がある量です。たとえば、ステップ3の合計が22の場合、10の次の最高倍数(30)に到達するには、8から22を追加する必要があります。チェックデジットは8です。

これはすべてのアイデアです。スマートカードIDの検証でGoogleが何も返さなかったので、これがJavascriptでこれを行うには余計だと思っています...

任意の入力を歓迎します。

+0

私は混乱しています。これは動作しているかどうか? –

+0

私はこのループのように見えますが、毎回TRUEに出力されます。なぜなら、アラートには変数を代入する(文字列に)ループが壊れてしまい、arr.lengthまで繰り返さなくなるからです。あなたはjavascriptよりもはるかに新しいもののようです;)。私の答えを確認してください。 – tomfumb

+0

また、0は奇数ですか? – tomfumb

答えて

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

あなたがLuhnの検証に組み立てられているようです。もしそうなら、文字列の左側ではなく右から奇数/偶数を数える必要があることに注意してください。

関連する問題