Originally Posted by
waddtown
Since the new 1.3.9b release I am now having the same problem with solo cards
/includes/modules/payment/paypaldp.php
starting at line 2454 you have this section of code. Replace yours with this:
Code:
function determineCardType($cardNumber) {
$cardNumber = preg_replace('/[^0-9]/', '', $cardNumber);
// NOTE: We check Solo before Maestro, and Maestro/Switch *before* we check Visa/Mastercard, so we don't have to rule-out numerous types from V/MC matching rules.
if (preg_match('/^(6334[5-9][0-9]|6767[0-9]{2})[0-9]{10}([0-9]{2,3}?)?$/', $cardNumber)) {
$cardType = "SOLO";
} else if (preg_match('/^(49369[8-9]|490303|6333[0-4][0-9]|6759[0-9]{2}|5[0678][0-9]{4}|6[0-9][02-9][02-9][0-9]{2})[0-9]{6,13}?$/', $cardNumber)) {
$cardType = "MAESTRO";
} else if (preg_match('/^(49030[2-9]|49033[5-9]|4905[0-9]{2}|49110[1-2]|49117[4-9]|49918[0-2]|4936[0-9]{2}|564182|6333[0-4][0-9])[0-9]{10}([0-9]{2,3}?)?$/', $cardNumber)) {
$cardType = "MAESTRO"; // SWITCH is now Maestro
} elseif (preg_match('/^4[0-9]{12}([0-9]{3})?$/', $cardNumber)) {
$cardType = 'VISA';
} elseif (preg_match('/^5[1-5][0-9]{14}$/', $cardNumber)) {
$cardType = 'MASTERCARD';
} elseif (preg_match('/^3[47][0-9]{13}$/', $cardNumber)) {
$cardType = 'AMEX';
} elseif (preg_match('/^3(0[0-5]|[68][0-9])[0-9]{11}$/', $cardNumber)) {
$cardType = 'DINERS CLUB';
} elseif (preg_match('/^(6011[0-9]{12}|622[1-9][0-9]{12}|64[4-9][0-9]{13}|65[0-9]{14})$/', $cardNumber)) {
$cardType = 'DISCOVER';
} elseif (preg_match('/^(35(28|29|[3-8][0-9])[0-9]{12}|2131[0-9]{11}|1800[0-9]{11})$/', $cardNumber)) {
$cardType = "JCB";
} else {
$cardType = "UNKNOWN";
}
return $cardType;
}
Bookmarks