10

42 がすべての答えであることは誰もが知っていますが、これが有効なクレジット カード番号であることはニュースです。

このjQuery 検証テスト ページに「42」または「42176」と入力して、[OK] をクリックしてみてください。

どうしたの?これは事実上の検証ライブラリであるはずだと思いました。マイクロソフトも今は使ってるけど、「42」とか「42176」とかが有効なクレジットカード番号だと思ってる?! 長さのチェックすらしていません。確かに、長さチェックも追加する責任はありませんか? これは「クレジットカード」バリデーターと呼ばれ、「luhn」バリデーターではありません。

編集:ヒッチハイカーのユーモアはさておき-検証プラグインにパッチを適用して長さをチェックするにはどうすればよいですか。それは簡単ですか?

4

4 に答える 4

12

これはおそらく、このバリデーターが、提供された数値がLUHN-10アルゴリズム (0 modulo 10 である 4*2 + 2 = 10 であるため、42 が満たされる) を満たすかどうかをチェックするだけだからです。

より優れたバリデーターは、最小桁数をチェックする必要があります。

これが jQuery の最新のコードに対応しているかどうかはわかりませんが、クレジット カードの検証に関連するスニペットを見つけました。

    // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
    // based on http://en.wikipedia.org/wiki/Luhn
    creditcard: function(value, element) {
        if ( this.optional(element) )
            return "dependency-mismatch";
        // accept only digits and dashes
        if (/[^0-9-]+/.test(value))
            return false;
        var nCheck = 0,
            nDigit = 0,
            bEven = false;

        value = value.replace(/\D/g, "");

        for (n = value.length - 1; n >= 0; n--) {
            var cDigit = value.charAt(n);
            var nDigit = parseInt(cDigit, 10);
            if (bEven) {
                if ((nDigit *= 2) > 9)
                    nDigit -= 9;
            }
            nCheck += nDigit;
            bEven = !bEven;
        }

        return (nCheck % 10) == 0;
    },

...そして、これを見るとわかるように、すべての文字が数字であり、LUHN-10 が満たされていることを確認するだけで、最小の長さに注意を払う必要はありません。

于 2009-12-08T02:28:44.860 に答える
8

クレジットカードのルールを最小および最大の長さのルールと組み合わせて、必要なものを実現できます。それは大変な努力のように思えるかもしれませんが、私は同意するかもしれませんが、特定のカード番号の長さだけを受け入れたい場合は、より詳細に制御できます。

$('form').validate({
    '#ccNum': {
                   creditcard: true,
                   required: true,
                   minlength: 13,
                   maxlength: 19
              }
});
于 2009-12-08T14:56:03.123 に答える
6

クレジット カード番号の長さは、発行者によって異なる場合があります (はい、通常、最小の長さは ~ 13 桁です)。ただし、これはクライアント側の検証であるため、任意のデータをチェックすることよりも、小さなタイプミスの可能性を減らすことに重点が置かれている可能性があります。これはおそらくサーバー側で行う必要があります。

于 2009-12-08T02:32:14.293 に答える
0

検証でクレジット カードの長さを考慮するように jQuery 検証関数を修正しました。

クレジットカードの検証コードに次を追加しました-

if (value.length > 19 || value.length<12)
{
    return (false);
}

クレジット カード検証部分の完全なコードは次のとおりです。

creditcard: function(value, element) {
if ( this.optional(element) )
return "dependency-mismatch";
// accept only digits and dashes
if (/[^0-9-]+/.test(value))
return false;

// Modified part to check minimum and maximum card length
if (value.length > 19 || value.length<12)
{
    return (false);
}

var nCheck = 0,
nDigit = 0,
bEven = false;
value = value.replace(/\D/g, "");

for (n = value.length - 1; n >= 0; n--) {
var cDigit = value.charAt(n);
var nDigit = parseInt(cDigit, 10);
if (bEven) {
if ((nDigit *= 2) > 9)
nDigit -= 9;
}
nCheck += nDigit;
bEven = !bEven;
}

return (nCheck % 10) == 0;
},

カードの長さの最小値と最大値をそれぞれ 12 と 19 にハード コードしました。

于 2011-03-11T09:46:31.107 に答える