Completed
Push — master ( cc5380...7c0124 )
by Andreas
02:30
created

CreditCardDetector   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 0
dl 0
loc 30
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A detect() 0 10 3
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