私はJavascriptでクレジットカード番号のバリデーターを書いています。LUHN変数に対してチェックしたいので、自分でステップを記述したいと思います。これを実行するために、forループを使用してこれを実行しようとしています。しかし、私は行き詰まっていて、これから何をすべきかについていくつかの友好的なアドバイスを使うことができました。また、forループの構文全体に少し問題があります。それらを改善するためのヒントは、大歓迎です。
プロジェクトはここにあります:http: //jsfiddle.net/tomasantonj/eZKMa/12/
これが私が問題を抱えているコードです:
else if (filter.test(cardnumber.value))
{
// 1. Begin with second to last number iterate, every second number with 2 until start.
for(i = 0; i < cardnumber.length;i += 1){
newnumbers = (i * 2);
// 2. The result of the previous string to be added i+i+i.
for (i = 0; i < newnumbers.length; i += 1){
sum1 = (i + i);
// 3. Then add the remaining numbers together but skip the last which is a control number.
for (i = 0; i < cardnumber.length; i += 1){
sum2 = (i + i);
// 4. Add sum1 and sum2 together
var checksum = (sum1 + sum2);
alert('the sum of x and y is: ' + checksum);
// 5. Mod10 out of the checksum + cardnumber control number to get validity.
if ((checksum + cardnumber[-0]) % 10 === 0){
alert('LUHN checks out!');
}
else {
alert('not yet');
}
}
}
}
適切な質問をする方法がわかりませんが、問題は可変スコープ、forループ、およびforループでインデックスベースのクエリを実行することだと思います。私はこのコードが醜くて長いことを知っています。これは私の2回目のjavascriptの試みなので、あまり気にしないでください。
このコードを実行すると、チェックサムは未定義になります。これがなぜであるかを誰かが知っていますか?文字列と整数と何か関係があるのでしょうか?:S
どんな回答でも大歓迎です。ありがとう、トーマス