1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
4
|
|
|
|
5
|
|
|
namespace Larium\CreditCard; |
6
|
|
|
|
7
|
|
|
class CreditCardDetector |
8
|
|
|
{ |
9
|
|
|
private static $cardPatterns = array( |
10
|
|
|
CreditCard::VISA => '/^4\d{12}(\d{3})?$/', |
11
|
|
|
CreditCard::MASTER => '/^((5[1-5]\d{4}|677189)\d{10})|(2(?:2(?:2[1-9]|[3-9]\d)|[3-6]\d\d|7(?:[01]\d|20))-?\d{4}-?\d{4}-?\d{4})$/', |
12
|
|
|
CreditCard::DISCOVER => '/^6(?:011\d{12}|5\d{14}|4[4-9]\d{13}|22(?:1(?:2[6-9]|[3-9]\d)|[2-8]\d{2}|9(?:[01]\d|2[0-5]))\d{10})$/', |
13
|
|
|
CreditCard::UNIONPAY => '/^62[0-9]\d{13,16}$/', |
14
|
|
|
CreditCard::AMEX => '/^3[47]\d{13}$/', |
15
|
|
|
CreditCard::DINERS_CLUB => '/^(3((?:0[0-5])|(?:09)|(?:6[0-9])|(?:8[0-9])|(?:9[0-9]))\d{11}|2014\d{11}|2149\d{11})$/', |
16
|
|
|
CreditCard::JCB => '/^35(28|29|[3-8]\d)\d{12}$/', |
17
|
|
|
CreditCard::DANKORT => '/^5019\d{12}$/', |
18
|
|
|
CreditCard::MAESTRO => '/(?:5018|5020|5038|5612|5893|6304|6759|6761|6762|6763|0604|6390)[0-9]{8,15}/', |
19
|
|
|
CreditCard::FORBRUGSFORENINGEN => '/^600722\d{10}$/', |
20
|
|
|
CreditCard::LASER => '/^(6706|6771|6709)\d{8}(\d{4}|\d{6,7})?$/', |
21
|
|
|
CreditCard::SWITCH_BRAND => '/^6759\d{12}(\d{2,3})?$/', |
22
|
|
|
CreditCard::SOLO => '/^6767\d{12}(\d{2,3})?$/', |
23
|
|
|
|
24
|
|
|
); |
25
|
|
|
|
26
|
|
|
public function detect($number) |
27
|
|
|
{ |
28
|
|
|
foreach (self::$cardPatterns as $name => $pattern) { |
29
|
|
|
if (preg_match($pattern, $number)) { |
30
|
|
|
return $name; |
31
|
|
|
} |
32
|
|
|
} |
33
|
|
|
|
34
|
|
|
return false; |
35
|
|
|
} |
36
|
|
|
} |
37
|
|
|
|