Actualité du site
Librairie PHP de vérification de numéros officiels.
marc à écrit le 2008-01-16:
La librairie dont le code est fourni si dessous permet de vérifier une série de numéros. Les numéros vérifiés sont belges mais une adaptation permettrait de vérifier d'autres formats.
Les numéros vérifiés sont:
- le numéro nationnal
- le numéro de carte d'identité
- le numéro de sécurité sociale
- le numéro de compte IBAN
- le numéro de communication structurée
Notez l'utilisation de la fonction bcmod() permettant de faire des modulos en utilisant des nombres présentés sous forme de chaînes en lieu et place des entier trop petits sur mon pauvre x86/32bits ou de flottant imprécis.
<?php
function belgian_nn($num,$gender=NULL) // Numéro nationnal
{
$char=array('-',' ','/','_');
$num=str_replace($char,"",$num);
if(strlen($num)!=11)
{$char=array(" -"," ","/","_");
$num=str_replace($char,"",$num);
return FALSE; // Nombre de caractères incorrecte
}
if($gender) // verification du genre
{
if($gender=="m" && !(substr($num,7,2)%2))
{
return FALSE;// le genre ne correspond pas
}
if($gender=="f" && substr($num,7,2)%2)
{
return FALSE;// le genre ne correspond pas
}
}
if(!(checkdate(substr($num,3,2),substr($num,5,2),substr($num,1,2) ))) // verification de la date
{
return FALSE; //date incorrecte
}
//checksum du numero
$checknum=substr($num,9,2);
$num=(int)substr($num,0,9);
if(substr($num,1,2)<date('y',time()))// né après le 1-1-2000
{
$num="2".substr($num,0,8);
if ($checknum!=(97- bcmod($num,97)))
{
return FALSE; // Mauvais checksum
}
}
else
{
if ($checknum!=(97- bcmod($num,97)) )
{
return FALSE; // Mauvais checksum
}
}
return TRUE;
}
//--------------------------
function belgian_sis($num) // numéro de sécurité sociale
{
if(strlen($num)!=10)
{
return FALSE; // Longueur incorrecte
}
if ($num>13000000)
{
$checksum=substr($num,8,2);
if($checksum!=bcmod(substr($num,0,8),97))
{
return FALSE; // Mauvais Checksum
}
}
return TRUE;
}
// ---------------------------------------
function belgian_id($num) // carte d'identité belge
{
$char=array('-',' ','/','_');
$num=str_replace($char,"",$num);
if(strlen($num)!=12)
{
return FALSE; // Longueur incorrecte
}
$checksum=substr($num,10,2);
if(bcmod(substr($num,0,10),97)==97&&$checksum==0)
{
return TRUE;
}
if($checksum!=bcmod(substr($num,0,10),97))
{
return FALSE; // Mauvais Checksum
}
return TRUE;
}
//----------------------------
function verif_iban($num)
{
$char=array('-',' ','/','_');
$num=str_replace($char,"",$num);
$control=substr($num,2,2);
$newnum= (substr($num,4)).(ord($num[0])-55). (ord($num[1])-55).$control;
if( bcmod($newnum,97)!=1)
{
return FALSE;// checksum incorrect
}
return TRUE;
}
//------------------
function belgian_cs($num) // communications structurées
{
$char=array('-',' ','/','_');
$num=str_replace($char,"",$num);
if(strlen($num)!=12)
{
return FALSE; // Longueur incorrecte
}
$sum=bcmod(substr($num,0,10),97);
if($sum==substr($num,11,2))
{
return TRUE;
}
if($sum==0 && substr($num,11,2)==97)
{
return TRUE;
}
return FALSE;
}
?>
Ajouter un commentaire
Haut de page
