Validateur de code SIREN pour symfony
- categories
- Uncategorized
- published
- reading time
- 2 minutes
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.
/**
* 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:
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.