Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- /* Luhn algorithm number checker - (c) 2005-2008 shaman - www.planzero.org *
- * This code has been released into the public domain, however please *
- * give credit to the original author where possible. */
- function luhn_check($number) {
- // Strip any non-digits (useful for credit card numbers with spaces and hyphens)
- $number=preg_replace('/D/', '', $number);
- // Set the string length and parity
- $number_length=strlen($number);
- $parity=$number_length % 2;
- // Loop through each digit and do the maths
- $total=0;
- for ($i=0; $i<$number_length; $i++) {
- $digit=$number[$i];
- // Multiply alternate digits by two
- if ($i % 2 == $parity) {
- $digit*=2;
- // If the sum is two digits, add them together (in effect)
- if ($digit > 9) {
- $digit-=9;
- }
- }
- // Total up the digits
- $total+=$digit;
- }
- // If the total mod 10 equals 0, the number is valid
- return ($total % 10 == 0) ? TRUE : FALSE;
- }
- ?>
- function check_cc($cc, $extra_check = false){
- $cards = array(
- "visa" => "(4d{12}(?:d{3})?)",
- "amex" => "(3[47]d{13})",
- "jcb" => "(35[2-8][89]ddd{10})",
- "maestro" => "((?:5020|5038|6304|6579|6761)d{12}(?:dd)?)",
- "solo" => "((?:6334|6767)d{12}(?:dd)?d?)",
- "mastercard" => "(5[1-5]d{14})",
- "switch" => "(?:(?:(?:4903|4905|4911|4936|6333|6759)d{12})|(?:(?:564182|633110)d{10})(dd)?d?)",
- );
- $names = array("Visa", "American Express", "JCB", "Maestro", "Solo", "Mastercard", "Switch");
- $matches = array();
- $pattern = "#^(?:".implode("|", $cards).")$#";
- $result = preg_match($pattern, str_replace(" ", "", $cc), $matches);
- if($extra_check && $result > 0){
- $result = (validatecard($cc))?1:0;
- }
- return ($result>0)?$names[sizeof($matches)-2]:false;
- }
- $cards = array(
- "4111 1111 1111 1111",
- );
- foreach($cards as $c){
- $check = check_cc($c, true);
- if($check!==false)
- echo $c." - ".$check;
- else
- echo "$c - Not a match";
- echo "<br/>";
- }
- 4111 1111 1111 1111 - Visa
- function validateCC($cc_num, $type) {
- if($type == "American") {
- $denum = "American Express";
- } elseif($type == "Dinners") {
- $denum = "Diner's Club";
- } elseif($type == "Discover") {
- $denum = "Discover";
- } elseif($type == "Master") {
- $denum = "Master Card";
- } elseif($type == "Visa") {
- $denum = "Visa";
- }
- if($type == "American") {
- $pattern = "/^([34|37]{2})([0-9]{13})$/";//American Express
- if (preg_match($pattern,$cc_num)) {
- $verified = true;
- } else {
- $verified = false;
- }
- } elseif($type == "Dinners") {
- $pattern = "/^([30|36|38]{2})([0-9]{12})$/";//Diner's Club
- if (preg_match($pattern,$cc_num)) {
- $verified = true;
- } else {
- $verified = false;
- }
- } elseif($type == "Discover") {
- $pattern = "/^([6011]{4})([0-9]{12})$/";//Discover Card
- if (preg_match($pattern,$cc_num)) {
- $verified = true;
- } else {
- $verified = false;
- }
- } elseif($type == "Master") {
- $pattern = "/^([51|52|53|54|55]{2})([0-9]{14})$/";//Mastercard
- if (preg_match($pattern,$cc_num)) {
- $verified = true;
- } else {
- $verified = false;
- }
- } elseif($type == "Visa") {
- $pattern = "/^([4]{1})([0-9]{12,15})$/";//Visa
- if (preg_match($pattern,$cc_num)) {
- $verified = true;
- } else {
- $verified = false;
- }
- }
- if($verified == false) {
- //Do something here in case the validation fails
- echo "Credit card invalid. Please make sure that you entered a valid <em>" . $denum . "</em> credit card ";
- } else { //if it will pass...do something
- echo "Your <em>" . $denum . "</em> credit card is valid";
- }
- }
- echo validateCC("1738292928284637", "Dinners");
Add Comment
Please, Sign In to add comment