# Php > Algorithms Code Examples

## Credit Card Identification and Validation Class - The credit_card class

``` Credit Card Identification and Validation Class - The credit_card class provides methods for cleaning, validating and identifying the type of credit card numbers <?php class credit_card { function clean_no (\$cc_no) { // Remove non-numeric characters from \$cc_no return ereg_replace ('[^0-9]+', '', \$cc_no); } function identify (\$cc_no) { \$cc_no = credit_card::clean_no (\$cc_no); // Get card type based on prefix and length of card number if (ereg ('^4(.{12}|.{15})\$', \$cc_no)) return 'Visa'; if (ereg ('^5[1-5].{14}\$', \$cc_no)) return 'Mastercard'; if (ereg ('^3[47].{13}\$', \$cc_no)) return 'American Express'; if (ereg ('^3(0[0-5].{11}|[68].{12})\$', \$cc_no)) return 'Diners Club/Carte Blanche'; if (ereg ('^6011.{12}\$', \$cc_no)) return 'Discover Card'; if (ereg ('^(3.{15}|(2131|1800).{11})\$', \$cc_no)) return 'JCB'; if (ereg ('^2(014|149).{11})\$', \$cc_no)) return 'enRoute'; return 'unknown'; } function validate (\$cc_no) { // Reverse and clean the number \$cc_no = strrev (credit_card::clean_no (\$cc_no)); // VALIDATION ALGORITHM // Loop through the number one digit at a time // Double the value of every second digit (starting from the right) // Concatenate the new values with the unaffected digits for (\$ndx = 0; \$ndx < strlen (\$cc_no); ++\$ndx) \$digits .= (\$ndx % 2) ? \$cc_no[\$ndx] * 2 : \$cc_no[\$ndx]; // Add all of the single digits together for (\$ndx = 0; \$ndx < strlen (\$digits); ++\$ndx) \$sum += \$digits[\$ndx]; // Valid card numbers will be transformed into a multiple of 10 return (\$sum % 10) ? FALSE : TRUE; } function check (\$cc_no) { \$valid = credit_card::validate (\$cc_no); \$type = credit_card::identify (\$cc_no); return array (\$valid, \$type, 'valid' => \$valid, 'type' => \$type); } } ?> ```