socatele Administrator

Data inscrierii: 30/Sep/2008 Mesaje: 110
|
Trimis: 01/10/2008 07:56 Titlul subiectului: Credit Card Validation (PHP) |
|
|
Quote:
<?php
/************************************************** **********************
*
* Ccval - Credit Card Validation Function.
*
* This Function Accepts A Credit Card Number And, Optionally, A Code For
* A Credit Card Name. If A Name Code Is Specified, The Number Is Checked
* Against Card-specific Criteria, Then Validated With The Luhn Mod 10
* Formula. Otherwise It Is Only Checked Against The Formula. Valid Name
* Codes Are:
*
* Mcd - Master Card
* Vis - Visa
* Amx - American Express
* Dsc - Discover
* Dnc - Diners Club
* Jcb - Jcb
*
************************************************** **********************/
Function Ccval($num, $name = 'n/a') {
// Innocent Until Proven Guilty
$goodcard = True;
// Get Rid Of Any Non-digits
$num = Ereg_replace("[^[]]", "", $num);
// Perform Card-specific Checks, If Applicable
Switch ($name) {
Case "mcd" :
$goodcard = Ereg("^5[1-5].{14}$", $num);
Break;
Case "vis" :
$goodcard = Ereg("^4.{15}$|^4.{12}$", $num);
Break;
Case "amx" :
$goodcard = Ereg("^3[47].{13}$", $num);
Break;
Case "dsc" :
$goodcard = Ereg("^6011.{12}$", $num);
Break;
Case "dnc" :
$goodcard = Ereg("^30[0-5].{11}$|^3[68].{12}$", $num);
Break;
Case "jcb" :
$goodcard = Ereg("^3.{15}$|^2131|1800.{11}$", $num);
Break;
}
// The Luhn Formula Works Right To Left, So Reverse The Number.
$num = Strrev($num);
$total = 0;
For ($x=0; $x<strlen($num); $x++) {
$digit = Substr($num,$x,1);
// If It's An Odd Digit, Double It
If ($x/2 != Floor($x/2)) {
$digit *= 2;
// If The Result Is Two Digits, Add Them
If (strlen($digit) == 2)
$digit = Substr($digit,0,1) + Substr($digit,1,1);
}
// Add The Current Digit, Doubled And Added If Applicable, To The Total
$total += $digit;
}
// If It Passed (or Bypassed) The Card-specific Check And The Total Is
// Evenly Divisible By 10, It's Cool!
If ($goodcard && $total % 10 == 0) Return True; Else Return False;
}
?> |
|