检查卡是否为VISA或VISA Electron

时间:2014-03-03 11:24:31

标签: php

如何检查信用卡是否为VISA借记卡或Visa Electron?我找到了这个例子,但我对于信用卡algortime一无所知。

我知道这些功能是如何运作的,我只是想知道如何检查它是VISA ELECTRON还是VISA DEBIT卡。目前它只支持VISA借记,但需要检查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?)",
);

谢谢!

1 个答案:

答案 0 :(得分: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开头 Visa电子:42,45,48,49

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