Vérification d’un numéro de registre national belge en PHP
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 !

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;
C’est mis à jour, merci !
et même remplacer la division par le modulo pour tester si F ou M
$sex_test = ($sex % 2);