【问题标题】:Check if card is VISA or VISAElectron [duplicate]检查卡是VISA还是VISA Electron [重复]
【发布时间】:2014-04-04 10:16:00
【问题描述】:

如何查看信用卡是 VISA Debit 还是 Visa Electron?我找到了这个例子,但我对信用卡算法一无所知。

我知道这些功能是如何工作的,我只是想问我如何检查它是 VISA ELECTRON 卡还是 VISA 借记卡。目前只支持VISA Debits,但需要检查VISA ELECTRON

$cards = array(
    "visa" => "(4\d{12}(?:\d{3})?)",
    "visaelectron" => "??????????????????????????",
    "amex" => "(3[47]\d{13})",
    "jcb" => "(35[2-8][89]\d\d\d{10})",
    "maestro" => "((?:5020|5038|6304|6579|6761)\d{12}(?:\d\d)?)",
    "solo" => "((?:6334|6767)\d{12}(?:\d\d)?\d?)",
    "mastercard" => "(5[1-5]\d{14})",
    "switch" => "(?:(?:(?:4903|4905|4911|4936|6333|6759)\d{12})|(?:(?:564182|633110)\d{10})(\d\d)?\d?)",
);

谢谢!

【问题讨论】:

  • 如果你“对信用卡算法一无所知”,你应该研究一下。我们希望您在提问之前做好功课。你现在告诉我们的只是“我找到了这段代码。我不知道它做了什么。为我修复它”
  • 我知道它是如何工作的,请再次查看帖子。对不起

标签: php


【解决方案1】:

您找到的数组包含regular expressions

您可以遍历这个数组并检查提供的值是否与正则表达式之一匹配,如果匹配,您就知道他们使用了哪种类型的卡。

类似这样的:

$cards = array(
    "visa" => "(4\d{12}(?:\d{3})?)",
    "amex" => "(3[47]\d{13})",
    "jcb" => "(35[2-8][89]\d\d\d{10})",
    "maestro" => "((?:5020|5038|6304|6579|6761)\d{12}(?:\d\d)?)",
    "solo" => "((?:6334|6767)\d{12}(?:\d\d)?\d?)",
    "mastercard" => "(5[1-5]\d{14})",
    "switch" => "(?:(?:(?:4903|4905|4911|4936|6333|6759)\d{12})|(?:(?:564182|633110)\d{10})(\d\d)?\d?)",
);

$card_number = '4242424242424242'; // some made up card number

$card_type = 'unknown';

foreach ($cards as $card => $pattern) {
    if (preg_match('/' . $pattern . '/', $card_number)) {
        $card_type = $card;
        break;
    }
}

echo $card_type;

[编辑]现在关于您对“visaelectron”匹配的新要求。

签证通常以 49,44 或 47 开头 签证电子:42,45,48,49

因此您需要根据这些规则创建一个正则表达式并将其添加到您的数组中

【讨论】:

  • 我知道它是如何工作的,请再次查看帖子。对不起
  • 这行得通吗? "visaelectron" => "(4026|417500|4508|4844|491(3|7))"
猜你喜欢
  • 2019-10-07
  • 2017-10-27
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 2017-03-21
  • 2010-12-17
相关资源
最近更新 更多