function checkSGNum($raw_number) { $length_ok = strlen($raw_number) === 10; $cc_ok = substr($raw_number, 0, 2) === '65'; $num_ok = isDigits($raw_number); return $length_ok && $cc_ok && $num_ok; }
function checkCardDetails($cardType, $cardNumber, $cardMonth, $cardYear, $cardVerify) { $errors = array(); $cardType = strtolower($cardType); // card number and verification code depends on card type if ($cardType === 'visa') { if (!isDigits($cardNumber) || !checkLength($cardNumber, 16) || !((int) $cardNumber[0] === 4)) { array_push($errors, "Invalid card number"); } if (!isDigits($cardVerify) || !checkLength($cardVerify, 3)) { array_push($errors, "Invalid card verification code"); } } elseif ($cardType === 'mcard') { if (!isDigits($cardNumber) || !checkLength($cardNumber, 16) || !((int) $cardNumber[0] === 5)) { array_push($errors, "Invalid card number"); } if (!isDigits($cardVerify) || !checkLength($cardVerify, 3)) { array_push($errors, "Invalid card verification code"); } } elseif ($cardType === 'amex') { if (!isDigits($cardNumber) || !checkLength($cardNumber, 15) || !((int) $cardNumber[0] === 3)) { array_push($errors, "Invalid card number"); } if (!isDigits($cardVerify) || !checkLength($cardVerify, 4)) { array_push($errors, "Invalid card verification code"); } } else { array_push($errors, "Unrecognised card type"); } // card expiry date depends on current date $year = (int) date('Y'); $month = (int) date('n'); $cardYear = (int) $cardYear; $cardMonth = (int) $cardMonth; if ($year > $cardYear) { array_push($errors, "Card expiry must be in the future"); } elseif ($year === $cardYear && $month >= $cardMonth) { array_push($errors, "Card expiry must be in the future"); } return $errors; }
/** * Check credit card verification code. * This provides some rudimentary validation of a credit card number. * These checks depend on the card type: * - American express ($cardType = 'amex') card verification codes must be 4 digits long. * - MasterCard ($cardType = 'mcard') card verification codes must be 3 digits long. * - Visa ($cardType = 'visa') card verification codes must be 3 digits long. * * @param string $cardType The type of card, one of 'amex', 'mcard', or 'visa'. * @param string $cardVerifiy The credit card verification code. * @result True if $cardVerify passes some basic checks, false otherwise. */ function checkCardVerification($cardType, $cardVerify) { if (!isDigits($cardVerify)) { return false; } switch ($cardType) { case 'amex': return checkLength($cardVerify, 4); break; case 'mcard': case 'visa': return checkLength($cardVerify, 3); break; default: return false; } }
} // Check the city if (isEmpty($city)) { echo "<p>City cannot be empty</p>"; } else { if (!isLetters($city)) { echo "<p>City must be letters only</p>"; } else { $passCounter++; } } // Check the postcode if (isEmpty($postcode)) { echo "<p>Postcode cannot be empty</p>"; } else { if (!isDigits($postcode)) { echo "<p>Postcode must be numbers only</p>"; } else { $passCounter++; } } // Check the credit card $cardErrorArray = checkCardDetails($cardType, $cardNumber, $cardMonth, $cardYear, $cvc); if ($cardErrorArray != null) { echo "<p><strong>Credit Card Errors: </strong></p>"; foreach ($cardErrorArray as $error) { echo "<p>{$error}</p>"; } } else { $passCounter++; }