- return "VISA card" if substr($number,0,1) == "4";
- return "MasterCard" if substr($number,0,1) == "5";
- return "Discover card" if substr($number,0,1) == "6";
- return "American Express card" if substr($number,0,2) == "37";
- return "Diner's Club, Transmedia, or other dining/entertainment card" if substr($number,0,1) == "3";
+ return "VISA card" if $number =~ /^4\d{12}\d{3}?$/;
+ return "MasterCard" if $number =~ /^5[1-5]\d{14}$/;
+ return "Discover card" if $number =~ /^6011\d{12}$/;
+ return "American Express card" if $number =~ /^3[47]\d{13}/;
+ return "Diner's Club/Carte Blanche"
+ if $number =~ /^3(0[0-5]|[68]\d)\d{11}$/;
+ return "enRoute" if $number =~ /^2(014|149)\d{11}$/;
+ return "JCB" if $number =~ /^3\d{15}$/
+ || $number =~ /^(2131|1800)\d{11}$/;
+ return "BankCard" if $number =~ /^56(10\d\d|022[1-5])\d{10}$/;