-
Notifications
You must be signed in to change notification settings - Fork 0
Validator For Real World
Shesh Ghimire edited this page Sep 13, 2024
·
6 revisions
This example uses valid Payment Cards from library and assumes Luhn Validator package is installed.
💡 Even if Luhn package is not installed, the validation returns the same result. Its just Luhn Validation is skipped.
namespace App\Validation;
use TheWebSolver\Codegarage\PaymentCard\Traits\CardResolver;
use TheWebSolver\Codegarage\PaymentCard\CardInterface as Card;
use TheWebSolver\Codegarage\PaymentCard\CardFactory as Factory;
class DefaultValidator {
use CardResolver;
private const PAYLOAD = 'Src/Resource/paymentCards.json';
public function __construct(?array $allowedCards = null, Factory $factory = new Factory()) {
if (empty($allowedCards)) {
return;
}
$this->withoutDefaults();
$factory = $factory->withPayload(self::PAYLOAD);
$cards = [];
foreach ($allowedCards as $key) {
$cards[] = $factory->createCard(index: $key);
}
$this->setCards(...$cards);
}
public function validate(string|int $cardNumber): bool {
return $this->resolveCardFromNumber((string) $cardNumber) instanceof Card;
}
}
// All default cards are allowed.
$validator = new DefaultValidator();
$isValid = $validator->validate(cardNumber: /*Master Card*/ 5105105105105100); // true
// Only three cards are allowed.
$validator = new DefaultValidator(allowedCards: ['americanExpress', 'dinersClub', 'visa']);
$isValid = $validator->validate(cardNumber: /*Master Card*/ 5105105105105100); // false
$isValid = $validator->validate(cardNumber: /*American Express*/ 378282246310005); // true