1

私はjavascriptについて何も知りません。

文字列が「3005600008000」であると仮定すると、奇数の位置にあるすべての数字に 2 を掛け、偶数の位置にある数字に 1 を掛ける方法を見つける必要があります。

私が書いたこの疑似コードは、奇数(つまり「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)左から奇数桁全て2倍、偶数桁桁全て1倍する。

· 2) 1 桁を 2 で乗算した結果が 2 桁の数になる場合 (たとえば、「7 x 2 = 14」)、結果の桁を足し合わせて、新しい 1 桁の結果を生成します (" 1+4=5")。

· 3) 1 桁の結果をすべて加算します。

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

それが全体のアイデアです。スマートカード ID 検証に関する Google 検索では何も返されませんでした。Javascript でこれを行うのはやり過ぎだと思い始めています...

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

4

3 に答える 3

2

私がやろうとしていることは、Luhn検証と呼ばれていることを発見しました。

ここでアルゴリズムを見つけました。

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

私を助けるために時間を割いてくれてありがとう。とても有難い。

于 2011-06-21T17:54:26.607 に答える
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
  }
}
于 2011-06-20T23:44:18.167 に答える
1

Luhn検証に基づいて構築しているようです。その場合、文字列の左からではなく、右から奇数/偶数を数える必要があることに注意してください。

于 2011-06-21T00:31:00.000 に答える