[ create a new paste ] login | about

Link: http://codepad.org/MIue7G2F    [ raw code | output | fork ]

goodspeed - PHP, pasted on Mar 25:
<?php 

function validateCC($ccnum){ 

    // Clean up input  
    $ccnum = ereg_replace('[-[:space:]]', '',$ccnum); 


    // What kind of card do we have
    $type = check_type($ccnum);

    // Does the number matchup ?
    $valid = check_number($ccnum);

    return array($type, $valid);

}


// Prefix and Length checks
function check_type( $cardnumber ) { 

   $cardtype = "UNKNOWN";

   $len = strlen($cardnumber);
   if     ( $len == 15 && substr($cardnumber, 0, 1) == '3' )                 { $cardtype = "amex"; }
   elseif ( $len == 16 && substr($cardnumber, 0, 4) == '6011' )              { $cardtype = "discover"; }
   elseif ( $len == 16 && substr($cardnumber, 0, 1) == '5'  )                { $cardtype = "mc"; }
   elseif ( ($len == 16 || $len == 13) && substr($cardnumber, 0, 1) == '4' ) { $cardtype = "visa"; }

   return ( $cardtype );

}


// MOD 10 checks 
function check_number( $cardnumber ) {    

    $dig = toCharArray($cardnumber); 
    $numdig = sizeof ($dig); 
    $j = 0; 
    for ($i=($numdig-2); $i>=0; $i-=2){ 
        $dbl[$j] = $dig[$i] * 2; 
        $j++; 
    }     
    $dblsz = sizeof($dbl); 
    $validate =0; 
    for ($i=0;$i<$dblsz;$i++){ 
        $add = toCharArray($dbl[$i]); 
        for ($j=0;$j<sizeof($add);$j++){ 
            $validate += $add[$j]; 
        } 
    $add = ''; 
    } 
    for ($i=($numdig-1); $i>=0; $i-=2){ 
        $validate += $dig[$i]; 
    } 
    if (substr($validate, -1, 1) == '0') { return 1;  }
    else { return 0; }
} 


// takes a string and returns an array of characters 

function toCharArray($input){ 
    $len = strlen($input); 
    for ($j=0;$j<$len;$j++){ 
        $char[$j] = substr($input, $j, 1);     
    } 
    return ($char); 
} 

    $ccnumber = '5105105105105100';
    list($type, $valid) = validateCC($ccnumber);
    if ( $valid ) { 
         // Do something fun with the card
         echo "Number: <b>$ccnumber</b> ... Type: <b>$type</b> ... Valid: <b>$valid</b> <br />";
    }
    else { 
         // Return some sort of error
    }

?>


Output:
1
2
Number: <b>5105105105105100</b> ... Type: <b>mc</b> ... Valid: <b>1</b> <br />



Create a new paste based on this one


Comments: