从卡号中识别卡类型

时间:2011-05-06 12:13:27

标签: javascript credit-card luhn

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

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};

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

卡号文本字段的ID是CardNumber。我不知道可能需要什么其他信息,我有一个名为Validate的函数,它验证表单的其余部分,以及函数调用Calculate,它执行luhn检查。

4 个答案:

答案 0 :(得分:38)

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

<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/

答案 1 :(得分:2)

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

这些前缀的范围从单个数字(一切以“5”开头是万事达卡)到一些长达六七个数字的字符串,用于更加模糊的卡片类型,也适用于主流卡片,但不仅能够识别卡类型,也是发卡银行。

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

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

不利的一面是,虽然现在流通的前缀几乎是固定的,但他们总是需要提出更多,所以你需要确保你保留任何前缀列表 - 到目前为止,特别是如果你用它来检查更长的前缀范围。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

http://jquerycreditcardvalidator.com/

另请参阅此StackOverflow答案,以便很好地讨论信用卡号码与卡片类型的关系:

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