23

我有一系列看起来像这样的卡片类型

var cards = new Array();

cards [0] = {name: "VISA", length: "13,16", prefixes: "4", checkdigit: true};
cards [1] = {name: "VISA_DELTA/ELECTRON", length: "16", prefixes: "417500,4917,4913",     checkdigit: true};

但是我希望能够根据输入的卡号找到卡类型。例如,如果他们从下拉列表中选择他们的卡类型,即签证,那么信用卡号应该以 4 开头,否则当他们提交表格时,应该显示某种消息说这是(无论是什么卡,请更换卡类型)。任何帮助,将不胜感激。

卡号文本字段的 ID 是 CardNumber。我不确定可能需要什么其他信息,我有一个名为 Validate 的函数来验证表单的其余部分,还有一个名为 Calculate 的函数来进行 luhn 检查。

4

4 回答 4

67

我相信你可能正在寻找这样的东西:

<script type="text/javascript">
function GetCardType(number)
{
    // visa
    var re = new RegExp("^4");
    if (number.match(re) != null)
        return "Visa";

    // Mastercard 
    // Updated for Mastercard 2017 BINs expansion
     if (/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(number)) 
        return "Mastercard";

    // AMEX
    re = new RegExp("^3[47]");
    if (number.match(re) != null)
        return "AMEX";

    // Discover
    re = new RegExp("^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)");
    if (number.match(re) != null)
        return "Discover";

    // Diners
    re = new RegExp("^36");
    if (number.match(re) != null)
        return "Diners";

    // Diners - Carte Blanche
    re = new RegExp("^30[0-5]");
    if (number.match(re) != null)
        return "Diners - Carte Blanche";

    // JCB
    re = new RegExp("^35(2[89]|[3-8][0-9])");
    if (number.match(re) != null)
        return "JCB";

    // Visa Electron
    re = new RegExp("^(4026|417500|4508|4844|491(3|7))");
    if (number.match(re) != null)
        return "Visa Electron";

    return "";
}
</script>

最初发布在这里@http: //mel-green.com/2008/11/determine-credit-card-type-with-javascript/

于 2011-05-06T12:19:01.557 回答
3

这是一个专门为此而设计的 jQuery 插件:

http://jquerycreditcardvalidator.com/

另请参阅此 StackOverflow 答案,了解信用卡号与卡类型之间的关系:

https://stackoverflow.com/a/72801/12484

于 2014-09-11T20:46:35.567 回答
2

卡公司有一个相当明确的前缀列表,这些前缀是特定于卡类型的。

这些前缀的范围从一个数字(所有以“5”开头的都是万事达卡)到一些长达六或七位数字的字符串,用于更模糊的卡类型,也用于主流卡,但不仅能够识别卡类型还有开证行。

这是我找到的一个资源:http ://www.beachnet.com/~hstiles/cardtype.html

您可能还想查看维基百科:http ://en.wikipedia.org/wiki/Credit_card_numbers

不利的一面是,虽然现在流通的前缀几乎是固定的,但总有可能他们需要提出更多,所以你需要确保你保持任何前缀列表是最新的,特别是如果您使用它来检查较长的前缀范围。

于 2011-05-06T12:27:45.553 回答
1

卡前缀方案在 BIN(银行 ID 号)列表中有详细说明并定期更改,我建议不要验证 PAN 的完整第 1 6 位数字,除非您计划定期更新并且只对前几个数字进行粗略检查(例如,您缺少 48* 的签证/电子签证,签证长度可以跨越 16-19)。

如果你在英国;http://www.barclaycard.co.uk/business/documents/pdfs/bin_rules.pdf

于 2011-05-06T12:26:16.967 回答