Validateur de code SIREN pour symfony

Mar 4, 2009

Avatar of Olivier Girardot
Olivier Girardot

Dans la série des codes qui peuvent servir, voilà une classe PHP à copier dans le dossier lib de Symfony, elle permet, via l'algorithme de Luhn, de vérifier si un Code SIREN est valide dans un formulaire.

text

/**
* Classe implémentant une vérification du code Siren par l'algorithme de Luhn
* 
*/

class sfCodeSirenValidator extends sfValidator
{

public function execute($value, $error)
{
 //if so the length of the string given is incorrect
 if(strlen(trim($value))!=9){
  $error=$this->getParameter('sirenlength_error');
 
  return false;
 }

      $odd = !strlen($value)%2;
      $sum = 0;
      for($i=0;$i < strlen($value);++$i) {
          $n=0+$value[$i];
          $odd=!$odd;
          if($odd) {
              $sum+=$n;
          } else {
              $x=2*$n;
              $sum+=$x>9?$x-9:$x;
          }
      }
      if(($sum%10)==0){
       return true;
      } else {
       //the siren code is not a proper formatted one
       $error=$this->getParameter('siren_error');
      
       return false;
      }

}

public function initialize ($context , $parameters = null ){

  //Initialize parent
  parent::initialize($context);

  $this->setParameter('sirenlength_error' , 'Incorrect size for a siren code ');
  $this->setParameter('siren_error' , 'This is not a valid siren code');

  //Set parameters
  $this->getParameterHolder()->add($parameters);

  return true;
}

}

Son utilisation est simple via un fichier validate.yml de la façon suivante en le couplant à une vérification du nombre:


text

fields:
  codesiren:
    sfNumberValidator:
      nan_error: Le code siren est un numéro
    sfCodeSirenValidator:
      siren_error:      Le code siren est invalide
      sirenlength_error: La taille du code siren entré est incorrecte


Ce validateur permet ainsi d'être sûr de la validité d'un code SIREN et donc de l'identité de l'entreprise que l'on cherche à ajouter.

Menu

Follow

Copyright © 2026
 Olivier Girardot's Ramblings
  Powered by   Writizzy