Validation de carte de credit

Contenu du snippet

Entrer le numero de carte de credit et le type de carte de credit et ce code vous diras si il est possible qu'une carte de credit d'un certain type est possible pour le numero donné.

Input: type, numero
Output: True ou False

Source / Exemple :


function cc_validate($cc_num, $cc_type) {
	$mc_mask = array(1 => '51', 2 => '52', 3 => '53', 4 => '54', 5 => '55');
	$mc_len = array(1 => 16);
	$visa_mask = array(1 => '4');
	$visa_len = array(1 => 13, 2 => 16);
	$amex_mask = array(1 => '34', 2 => '37');
	$amex_len = array(1 => 15);
	$disc_mask = array(1 => '6001');
	$disc_len = array(1 => 16);
	$jcb_mask = array(1 => '3', 2 => '1800', 3 => '2131');
	$jcb_len = array(1 => 15, 2 => 16);

	$cc_mask = array();
	$cc_len = array();
	$cc_valid = false;

	/* STEP 1 VALIDER LEN + PREFIX */
	switch ($cc_type) {
		case 'mc':
			$cc_mask = $mc_mask;
			$cc_len = $mc_len;
			break;
		case 'visa':
			$cc_mask = $visa_mask;
			$cc_len = $visa_len;
			break;
		case 'amex':
			$cc_mask = $amex_mask;
			$cc_len = $amex_len;
			break;
		case 'disc':
			$cc_mask = $disc_mask;
			$cc_len = $disc_len;
			break;
		case 'jcb':
			$cc_mask = $jcb_mask;
			$cc_len = $jcb_len;
			break;
		default:
			die('Error, please go back');
	}
	$i = 1;
	while ((isset($cc_mask[$i]))&&(!empty($cc_mask[$i]))&&(!$cc_valid)) {
		$l = strlen($cc_mask[$i]);
		$cc_valid = (substr($cc_num, 0, $l)==$cc_mask[$i]);
		$i++;
	}
	if (!$cc_valid) { return false; }
	$i = 1; $cc_valid = false;
	while ((isset($cc_len[$i]))&&(!empty($cc_len[$i]))&&(!$cc_valid)) {
		$cc_valid = (strlen($cc_num)==$cc_len[$i]);
		$i++;
	}
	if (!$cc_valid) { return false; }
	$cc_valid = false;
	
	/* STEP 2 DOUBLE CHAQUES 2 DE 2 ET CHECK MOD 10 */
	$cc_num = strrev($cc_num);

	$num_sum = "";
	for($i = 0; $i < strlen($cc_num); $i++) {
		$cur_num = substr($cc_num, $i, 1);

		if($i % 2 == 1) {
			$cur_num *= 2;
		} if($cur_num > 9) {
			$f_num = $cur_num % 10;
			$s_num = ($cur_num - $f_num) / 10;
			$cur_num = $f_num + $s_num;
		}
		$num_sum += $cur_num;
	}
	$cc_valid = ($num_sum % 10 == 0);
	return $cc_valid;
}
?>

Conclusion :


Ce code fonctionne pour Master Card, Visa, American Express, Discovery, JCB (japon).

Il est relativement facile d'ajouter d'autre type de cartes, mais pour ce faire il est important de comprendre le code.

J'espere que vous aimerez.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.