Vérification d’un numéro de registre national belge en PHP

c'est du code Amaury 14 juin 2011 3 commentaires

Suite à un tweet de fred_dela du Bureau347 je me suis étonné de voir qu’il n’existe aucun outil en ligne pour vérifier si un numéro de registre national belge était valide ou pas ainsi que les informations contenues dans ce dernier.

Quelques tweets plus tard et une conversation entre Vinch01 et d’autres qui sort la page Wikipedia qui permet de réaliser les différentes conversions je me suis donc décidé à vite réaliser une fonction qui permet de réaliser ce genre d’outil.

La voici :

 
function validate($number){
 
	// Tableau de retour
	$return = array();
 
	$value = explode("-",$number);
	$birthday = $value[0];
	$sex = $value[1];
	$mod_base = $value[2];
 
	// 1. Birthday test 
 
	$tab_date = str_split($birthday,2);
	$year = $tab_date[0];
	$month = $tab_date[1];
	$day = $tab_date[2];
 
	if($year > "11"){
		$g_year = "19".$year;
	}
	elseif($year <= "11"){
		$g_year = "20".$year;
	}
 
	$date_test = checkdate($month,$day,$g_year);
 
	if($date_test == true){
		// Le test de date est bon
 
		$return[0] = "Birthday Ok";
 
		// On continue sur le test de sexe
 
		$sex_test = ($sex % 2);
 
		if($sex_test == 0){
			$return[1] = "F";
 
		}
		else{
			$return[1] = "M";
		}
 
		// Dernier test sur le modulo (base 97)
 
		$modulo = $birthday."".$sex;
 
		$mod_test = ($modulo % 97);
		$mod = explode(".",$mod_test);
		$mod_verif = $mod[0]*97;
 
		$pre_test = $modulo - $mod_verif;
		$test = 97 - $pre_test;
 
		if($test == $mod_base){
 
			// ID Valid
			$return[2] = "ID valid";
 
		}
		elseif($test != $mod_base){
 
			// ID Invalid
			$return[2] = "ID invalid";
 
		}
 
 
	}
	else{
		// Le test de date est mauvais
		// On retourne un false
 
		$return[0] = "Bad Format";
 
 
	}
 
	return($return);
 
}

Son utilisation est assez basique, il suffit de lui envoyer une variable contenant les 3 séries de chiffres séparée d’un “-” à savoir :

- YYMMDD (2 derniers chiffres de l’année de naissance – 2 chiffres du mois – 2 chiffres du jour )
- XXX ( 3 chiffres représentant le nombre de bébés du jour )
- XX ( un modulo de vérification sur une base 97 )

exemple :

 
	$date = "841110";
	$sex = "237";
	$modulo = "43";
 
	$combine = $date."-".$sex."-".$modulo;
	$test = validate($combine);
 
	echo "<pre>";
		print_r($test);
	echo "

“;

Bon amusement !

A propos de Amaury

Amaury

Born Nov. 10th 1984 in Belgium I'm an IT Administrator, PHP lover who like to use Photoshop and Pionner DJM ... Internet browsing since 1996 I was webmaster for a couple of national radio shows on NRJ and Radio Contact but also IT Administrator for Fun Radio. Now co-founder of 56k Web Agency with Alexis Lecomte I also created Quote of ze day, Boost-Art and Twusic


Mais aussi ...




3 Commentaires REPONDRE RSS

  1. Merci, super script

    Il y a juste un petit bug : $_POST["sex"] n’existe pas, il faut le remplacer par la variable $sex

    $sex_test = $_POST['sex']/2;

    remplacer par

    $sex_test = $sex/2;

    Commentaire de dombili — 15 novembre 2011 @ 16 h 47 min
  2. C’est mis à jour, merci ! :-)

    Commentaire de Amaury — 15 novembre 2011 @ 16 h 51 min
  3. et même remplacer la division par le modulo pour tester si F ou M

    $sex_test = ($sex % 2);

    Commentaire de dombili — 15 novembre 2011 @ 16 h 54 min

Et vous, votre avis ?