function CreditCardCompany($ccNum)
 {
        /*
            * mastercard: Must have a prefix of 51 to 55, and must be 16 digits in length.
            * Visa: Must have a prefix of 4, and must be either 13 or 16 digits in length.
            * American Express: Must have a prefix of 34 or 37, and must be 15 digits in length.
            * Diners Club: Must have a prefix of 300 to 305, 36, or 38, and must be 14 digits in length.
            * Discover: Must have a prefix of 6011, and must be 16 digits in length.
            * JCB: Must have a prefix of 3, 1800, or 2131, and must be either 15 or 16 digits in length.
        */
 
        if (ereg("^5[1-5][0-9]{14}$", $ccNum))
                return "Mastercard";
 
        if (ereg("^4[0-9]{12}([0-9]{3})?$", $ccNum))
                return "Visa";
 
        if (ereg("^3[47][0-9]{13}$", $ccNum))
                return "American Express";
 
        if (ereg("^3(0[0-5]|[68][0-9])[0-9]{11}$", $ccNum))
                return "Diners Club";
 
        if (ereg("^6011[0-9]{12}$", $ccNum))
                return "Discover";
 
        if (ereg("^(3[0-9]{4}|2131|1800)[0-9]{11}$", $ccNum))
                return "JCB";
 }
 
echo("test American Express: 378282246310005: ".CreditCardCompany("378282246310005")."\n");
echo("test Visa: 4111111111111111: ".CreditCardCompany("4111111111111111")."\n");
echo("test Mastercard: 5555555555554444: ".CreditCardCompany("5555555555554444")."\n");

here’s the output:

[root@server~]# php testcc.php
test American Express: 378282246310005: American Express
test Visa: 4111111111111111: Visa
test Mastercard: 5555555555554444: Mastercard
[root@server~]#

from http://blogs.sitepoint.com/card-validation-class-php/