Exemple #1
0
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++;
}