【问题标题】:Identify card type from card number [duplicate]从卡号识别卡类型[重复]
【发布时间】:2011-08-20 03:41:51
【问题描述】:

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

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 检查。

【问题讨论】:

    标签: javascript credit-card luhn


    【解决方案1】:

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

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

    【讨论】:

    • 虽然这可能会回答问题,但不鼓励仅提供链接的答案。如果链接失效(链接失效),则此答案将不包含任何信息。考虑编辑此答案以包含链接中的相关详细信息。
    • 谢谢 - 虽然我在 3 年前回答过这个问题。感谢您的反对。
    • 我不想就此展开辩论,因为它对网站没有帮助,也没有为新成员提供友好的体验环境,但 S/O 的文化在最近几年;曾经有一段时间,发布链接通常被认为是可以的,尤其是因为如果我只是发布别人文章的内容,那感觉就像我在偷窃一样。我同意新的做事方式,但我发现追溯多年前的某些事情并没有帮助。无论如何,这是我的看法。
    • fwiw,你必须先把Visa electron放在visa之前,否则它会抓到visa并退出。 Amex/Diners 也一样
    • 请注意其他绊倒的人;万事达卡此后添加了一个新的 BIN 系列 (222100-272099),因此必须修改正则表达式以考虑到这一点。这个问题重复的答案解释了这一点。
    【解决方案2】:

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

    http://jquerycreditcardvalidator.com/

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      不利的一面是,虽然现在流通的前缀几乎是固定的,但总有可能他们需要提出更多,因此您需要确保保留所有前缀列表 -迄今为止,特别是如果您使用它来检查较长的前缀范围。

      【讨论】:

      • +1 他们也时不时地放弃范围,或者将它们标记为仅限 ATM/没有 ecomm/没有 CNP 等
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-05-24
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 2014-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多