Skip to content

Commit e0d23e6

Browse files
Added the ability to use a custom validator
1 parent 0733106 commit e0d23e6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+133
-44
lines changed

README.md

Lines changed: 26 additions & 2 deletions

composer.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@
6363
"DragonCode\\CardNumber\\": "src/"
6464
}
6565
},
66+
"autoload-dev": {
67+
"psr-4": {
68+
"Tests\\": "tests/"
69+
}
70+
},
6671
"config": {
6772
"allow-plugins": {
6873
"dragon-code/codestyler": true,

src/CardNumber.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,50 @@
1414
use DragonCode\CardNumber\Validators\Banks\DinersClub;
1515
use DragonCode\CardNumber\Validators\Banks\Discovery;
1616
use DragonCode\CardNumber\Validators\Banks\Forbrugsforeningen;
17-
use DragonCode\CardNumber\Validators\Banks\HiperCard;
17+
use DragonCode\CardNumber\Validators\Banks\HiperCardValidator;
1818
use DragonCode\CardNumber\Validators\Banks\Jcb;
1919
use DragonCode\CardNumber\Validators\Banks\Maestro;
20-
use DragonCode\CardNumber\Validators\Banks\MasterCard;
20+
use DragonCode\CardNumber\Validators\Banks\MasterCardValidator;
2121
use DragonCode\CardNumber\Validators\Banks\Mir;
2222
use DragonCode\CardNumber\Validators\Banks\Troy;
2323
use DragonCode\CardNumber\Validators\Banks\UnionPay;
2424
use DragonCode\CardNumber\Validators\Banks\Visa;
2525
use DragonCode\CardNumber\Validators\Banks\VisaElectron;
26-
use DragonCode\CardNumber\Validators\DefaultCard;
26+
use DragonCode\CardNumber\Validators\CardValidator;
27+
use DragonCode\CardNumber\Validators\DefaultCardValidator;
2728
use DragonCode\CardNumber\Validators\Loyalty\Chars;
2829
use DragonCode\CardNumber\Validators\Loyalty\RalfRinger;
2930
use DragonCode\CardNumber\Validators\Loyalty\YvesRocher;
3031

32+
use function is_a;
33+
3134
class CardNumber
3235
{
3336
public static function isValid(int|string $number, CardType|string|null $cardType = null): bool
3437
{
38+
if (is_a($cardType, CardValidator::class, true)) {
39+
return $cardType::isValid($number);
40+
}
41+
3542
return match (static::detectCardType($cardType)) {
3643
CardType::americanExpress => AmericanExpress::isValid($number),
3744
CardType::chars => Chars::isValid($number),
3845
CardType::dankort => Dankort::isValid($number),
3946
CardType::dinersClub => DinersClub::isValid($number),
4047
CardType::discovery => Discovery::isValid($number),
4148
CardType::forbrugsforeningen => Forbrugsforeningen::isValid($number),
42-
CardType::hiperCard => HiperCard::isValid($number),
49+
CardType::hiperCard => HiperCardValidator::isValid($number),
4350
CardType::jcb => Jcb::isValid($number),
4451
CardType::maestro => Maestro::isValid($number),
45-
CardType::masterCard => MasterCard::isValid($number),
52+
CardType::masterCard => MasterCardValidator::isValid($number),
4653
CardType::mir => Mir::isValid($number),
4754
CardType::ralfRinger => RalfRinger::isValid($number),
4855
CardType::troy => Troy::isValid($number),
4956
CardType::unionPay => UnionPay::isValid($number),
5057
CardType::visa => Visa::isValid($number),
5158
CardType::visaElectron => VisaElectron::isValid($number),
5259
CardType::yvesRocher => YvesRocher::isValid($number),
53-
default => DefaultCard::isValid($number)
60+
default => DefaultCardValidator::isValid($number)
5461
};
5562
}
5663

src/Validators/Banks/AmericanExpress.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace DragonCode\CardNumber\Validators\Banks;
66

7-
use DragonCode\CardNumber\Validators\Card;
7+
use DragonCode\CardNumber\Validators\CardValidator;
88

9-
class AmericanExpress extends Card
9+
class AmericanExpress extends CardValidator
1010
{
1111
protected static ?string $pattern = '/^3[47][0-9]/';
1212

src/Validators/Banks/Dankort.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace DragonCode\CardNumber\Validators\Banks;
66

7-
use DragonCode\CardNumber\Validators\Card;
7+
use DragonCode\CardNumber\Validators\CardValidator;
88

9-
class Dankort extends Card
9+
class Dankort extends CardValidator
1010
{
1111
protected static ?string $pattern = '/^5019/';
1212
}

src/Validators/Banks/DinersClub.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace DragonCode\CardNumber\Validators\Banks;
66

7-
use DragonCode\CardNumber\Validators\Card;
7+
use DragonCode\CardNumber\Validators\CardValidator;
88

9-
class DinersClub extends Card
9+
class DinersClub extends CardValidator
1010
{
1111
protected static ?string $pattern = '/^3(0[0-5]|[68][0-9])[0-9]/';
1212

src/Validators/Banks/Discovery.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace DragonCode\CardNumber\Validators\Banks;
66

7-
use DragonCode\CardNumber\Validators\Card;
7+
use DragonCode\CardNumber\Validators\CardValidator;
88

9-
class Discovery extends Card
9+
class Discovery extends CardValidator
1010
{
1111
protected static ?string $pattern = '/^6(011|22126|22925|4[4-9]|5)/';
1212
}

src/Validators/Banks/Forbrugsforeningen.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace DragonCode\CardNumber\Validators\Banks;
66

7-
use DragonCode\CardNumber\Validators\Card;
7+
use DragonCode\CardNumber\Validators\CardValidator;
88

9-
class Forbrugsforeningen extends Card
9+
class Forbrugsforeningen extends CardValidator
1010
{
1111
protected static ?string $pattern = '/^600/';
1212
}

src/Validators/Banks/HiperCard.php renamed to src/Validators/Banks/HiperCardValidator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace DragonCode\CardNumber\Validators\Banks;
66

7-
use DragonCode\CardNumber\Validators\Card;
7+
use DragonCode\CardNumber\Validators\CardValidator;
88

9-
class HiperCard extends Card
9+
class HiperCardValidator extends CardValidator
1010
{
1111
protected static ?string $pattern = '/^(606282\d{7}(\d{3})?)|(3841\d{15})/';
1212

src/Validators/Banks/Jcb.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace DragonCode\CardNumber\Validators\Banks;
66

7-
use DragonCode\CardNumber\Validators\Card;
7+
use DragonCode\CardNumber\Validators\CardValidator;
88

9-
class Jcb extends Card
9+
class Jcb extends CardValidator
1010
{
1111
protected static ?string $pattern = '/^(?:2131|1800|35\d{3})/';
1212

0 commit comments

Comments
 (0)