Actualité du site Syndication RSS

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!=(97bcmod($num,97)))
            {
            return 
FALSE// Mauvais checksum
            
}
        }    
    else
        {
        if (
$checknum!=(97bcmod($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==&& substr($num,11,2)==97)
        {
        return 
TRUE;
        }
    return 
FALSE;
    }
?>


comment Ajouter un commentaire   top Haut de page
Partager

A Chaud Menu