Home >> Snippet List >> Snippet

Name
Validate credit card numbers
Description
A set of functions to check the validity of a credit card number ($number, $type) returns 1 if the account number is valid, zero if not The $type argument is optional If included, it will perform additional checking to ensure the card is of the type specified Valid types include: VISA, Mastercard, Discover, and AMEX
PHP Snippet
<?PHP 
 
//  validateCC($number[,$type]) 
//  Uses  the  MOD  10  algorythm  to  determine  if  a 
//  credit  card  number  is  valid.                                                                               
 
//  $number  =  credit  card  account  number     
//  $type  is  optional.    Setting  type  to        
//  visa,  mastercard,  discover,  or  amex  will  
//  perform  additional  checking  on  the  account number.                                                                          
 
 
//  The  function  returns  1  (true)  if  the  CC  is    
//  valid,  0  (false)  if  it  is  invalid,  and  -1  if      
//  the  type  entered  does  not  match  the  supported   
//  types  listed  above.     
 
FUNCTION  validateCC($ccnum,  $type  =  'unknown'){ 
 
 
        //Clean  up  input 
 
        $type  =  STRTOLOWER($type); 
        $ccnum  =  EREG_REPLACE( '[-[:space:]]',  '',$ccnum);   
 
 
        //Do  type  specific  checks 
 
        IF  ($type  ==  'unknown')  { 
 
                //Skip  type  specific  checks 
 
        } 
        ELSEIF  ($type  ==  'mastercard'){ 
                IF  (STRLEN($ccnum)  !=  16  ||  !EREG( '^5[1-5]',  $ccnum))   
RETURN  0; 
        } 
        ELSEIF  ($type  ==  'visa'){ 
                IF  ((STRLEN($ccnum)  !=  13  &&  STRLEN($ccnum)  !=  16)  ||   
SUBSTR($ccnum,  0,  1)  !=  '4')  RETURN  0; 
        } 
        ELSEIF  ($type  ==  'amex'){ 
                IF  (STRLEN($ccnum)  !=  15  ||  !EREG( '^3[47]',  $ccnum))   
RETURN  a; 
        } 
        ELSEIF  ($type  ==  'discover'){ 
                IF  (STRLEN($ccnum)  !=  16  ||  SUBSTR($ccnum,  0,  4)  !=   
'6011')  RETURN  0; 
        } 
        ELSE  { 
                //invalid  type  entered 
                RETURN  -1; 
        } 
 
 
        //  Start  MOD  10  checks 
 
        $dig  =  toCharArray($ccnum); 
        $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); 
} 
 
?>