122 const REGEX_MASTERCARD =
'/^(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{12}$/';
124 self::BRAND_VISA =>
'/^4\d{12}(\d{3})?$/',
125 self::BRAND_MASTERCARD => self::REGEX_MASTERCARD,
126 self::BRAND_DISCOVER =>
'/^(6011|65\d{2}|64[4-9]\d)\d{12}|(62\d{14})$/',
127 self::BRAND_AMEX =>
'/^3[47]\d{13}$/',
128 self::BRAND_DINERS_CLUB =>
'/^3(0[0-5]|[68]\d)\d{11}$/',
129 self::BRAND_JCB =>
'/^35(28|29|[3-8]\d)\d{12}$/',
130 self::BRAND_SWITCH =>
'/^6759\d{12}(\d{2,3})?$/',
131 self::BRAND_SOLO =>
'/^6767\d{12}(\d{2,3})?$/',
132 self::BRAND_DANKORT =>
'/^5019\d{12}$/',
133 self::BRAND_MAESTRO =>
'/^(5[06-8]|6\d)\d{10,17}$/',
134 self::BRAND_FORBRUGSFORENINGEN =>
'/^600722\d{10}$/',
135 self::BRAND_LASER =>
'/^(6304|6706|6709|6771(?!89))\d{8}(\d{4}|\d{6,7})?$/',
175 $known_brands = array_keys($this->supported_cards);
177 if (in_array($name, $known_brands)) {
181 $this->supported_cards[$name] = $expression;
214 if (
null === $value ||
'' === $value) {
217 $value = (int) gmdate(
'Y', gmmktime(0, 0, 0, 1, 1, (
int) $value));
238 $requiredParameters = array(
239 'number' =>
'credit card number',
240 'expiryMonth' =>
'expiration month',
241 'expiryYear' =>
'expiration year'
244 foreach ($requiredParameters as $key => $val) {
258 if (!is_null($this->
getNumber()) && !preg_match(
'/^\d{12,19}$/i', $this->
getNumber())) {
380 return $this->
setParameter(
'number', preg_replace(
'/\D/',
'', $value));
390 return substr($this->
getNumber(), -4, 4) ?:
null;
401 $maskLength = strlen($this->
getNumber()) - 4;
416 if (preg_match($val, $this->
getNumber())) {
440 return $this->
setParameter(
'expiryMonth', (
int) $value);
590 if (preg_match($pattern, $tracks, $matches) === 1) {
668 $names = explode(
' ', $fullName, 2);
670 return [$names[0], isset($names[1]) ? $names[1] :
null];
917 return $this->
setParameter(
'billingPhoneExtension', $value);
1006 return $this->
setParameter(
'shippingFirstName', $value);
1027 return $this->
setParameter(
'shippingLastName', $value);
1069 return $this->
setParameter(
'shippingAddress1', $value);
1090 return $this->
setParameter(
'shippingAddress2', $value);
1132 return $this->
setParameter(
'shippingPostcode', $value);
1216 return $this->
setParameter(
'shippingPhoneExtension', $value);
1510 return $value ? $value->format($format) :
null;
1522 $value =
new DateTime($value,
new DateTimeZone(
'UTC'));