[Gllug] (OT) Resources for information on UK credit and debit cards

Liam Delahunty liamvictor at gmail.com
Fri Nov 26 13:24:16 UTC 2004


On Fri, 26 Nov 2004 12:55:54 +0000, Simon Perry wrote:
> I want to implement a credit card validation routine on the order page
> of a website I'm working on that will weed out invalid cards before I do
> the actual call to secpay to handle the transaction. What I need to know
> is the prefix for switch, delta, solo, maestro cards, the valid lengths

All credit/debit cards do the luhn 10 test. I've got a basic list of
cards _somewhere_ but all can find of the moment is:

/*
Card Type 					Prefix 				Length 
MasterCard 					51-55 				16 
VISA 						4 					13, 16 
American Express (AMEX) 	34, 37 				15 
Diners Club/Carte Blanche 	300-305, 36, 38 	14 
enRoute 					2014, 2149 			15 
Discover 					6011 				16 
JCB 						3 					16 
JCB 						2131, 1800 			15 
*/

Apologies if gmail screws the tabbing - in visa they have two lengths,
all the others just one.

Now this is pretty old and obviously crap, but it's a start...
Personally I've just requested the user selects a card type, and I
only do the very basic validation of seeing if it's more-or-less what
they claim it is. When the card is processed the actual issuer is of
little importance (using a HSBC PDQ, might be different with secpay)
however I'd still be interested in other prefix/codes just to imporve
the routine.

The luhn 10 I do is:
$cc_num_test = eregi_replace("[^0-9]","", $cc_num);
$cc_num_len = strlen($cc_num_test);
// if uneven add a zeo at begining
if (($cc_num_len % 2) != 0){
	$cc_num_test = "0" . $cc_num_test;
	$cc_num_len++;
}

for ($p=0; $p<$cc_num_len; $p++){
	if ($p %2 == 0){
		$here = substr($cc_num_test, $p, 1);
		if ($here*2 > 9){
			$here = ($here*2)-9;
		}else{
			$here = $here*2;
		}
		$x = $x + $here;
	}else{
		$here = substr($cc_num_test, $p, 1);
		$y = $y + $here;
	}
}
$tot = $x + $y;
if ($tot % 10 != 0){
	$err_array[cc_num] = "<b>Error</b> Your credit card number $cc_num
doesn't appear to be valid.";
}
}

wrote it YEARS ago and the code is not great, but it does the job.

-- 
Kind regards, Liam Delahunty
-- 
Gllug mailing list  -  Gllug at gllug.org.uk
http://lists.gllug.org.uk/mailman/listinfo/gllug




More information about the GLLUG mailing list