public function validate()
{
foreach (array('number', 'expiryMonth', 'expiryYear') as $key) {
if (!$this->getParameter($key)) {
throw new InvalidCreditCardException("The {$key} parameter is required");
}
}
if ($this->getExpiryDate('Ym') < gmdate('Ym')) {
throw new InvalidCreditCardException('Card has expired');
}
if (!Helper::validateLuhn($this->getNumber())) {
throw new InvalidCreditCardException('Card number is invalid');
}
if (!is_null($this->getNumber()) && !preg_match('/^\\d{12,19}$/i', $this->getNumber())) {
throw new InvalidCreditCardException('Card number should have 12 to 19 digits');
}
}