Bonjours a tous je cherche une méthode de validation de numéro de siret j'ai essayer de nombreuse méthode non concluante.
Et la je désespère.

Merci d'avance

7 réponses


Brory Gregunel
Auteur
Réponse acceptée

Bon Ben voici le code validation de siret

/**
        * regle de validation siret
        **/
        'siret' => array(
            array(
                'rule' => 'validateSiret',
                'message' => "Le numero de SIRET indiqué n'est pas valide."
            ),
            array(
                'rule' => 'numeric', 
                'message' => "Le numero de SIRET etre uniquement composé de chiffre."
            ),
            array(
                'rule' => array(
                        'minLength',
                        '14'
                    ),
                'message' => 'Le numero de SIRET doit avoir au moins 14 caractères.'
            ),

            array(
                'rule' => array(
                    'maxLength',
                    '14'
                ),
                'message' => 'Le numero de SIRET ne doit pas dépasser 14 caractères.'   
            )
        ),
    );

  function validateSiret($values)
  {
    $values = $this->data'Pro']'siret'];
    $siret = trim($values);
    if(empty($siret) || strlen($siret) != 14)
    {   
        return false;

    }
    $sum = 0;
    for($i=0; $i<14; $i++)
    {
      if($i%2 == 0)
      {
        $tmp = $siret$i]*2;
        $tmp = $tmp > 9 ? $tmp - 9 : $tmp;
      }
      else
      {
        $tmp= $siret$i];
      }
      $sum += $tmp;
    }
    if($sum%10 !== 0)
    {

        return false;
    }
    return true;
  }

J'ai trouvé une chose intéressante dans le cakebook pour valider les CC Cake utilise l'algorithme de Luhn donc le même que pour la clef d'un numéro de SIRET qui doit pour être valide avoir un modulo de 10 (pour les SIRET pas Pour CC) mais peut on réutiliser l'algorithme dans une règle de validation perso aucune explication la-dessus,

Ou alors quelqu'un a t'il une idée avec une expression régulière

Si se sujet trouve la réponse je pense que ce serais cool de la poster en Freebies

Salut camarade,

bon pour faire simple, suffit de lire la doc du DSI du CNRS sur la normalisation des codes SIREN et SIRET où tout est expliqué. (le lien ici)

Je reprend donc, il y a un algorithme comme tu l'as justement fais remarqué qui s'appelle "Formule de Luhn" qui permet de vérifier si un numéro de SIREN/SIRET est valide. Pour ne pas te mâcher le travail complètement je vais te fournir le dit algo que je viens de retranscrire en PHP. (Le code est dirty, j'ai fais ça à l'arrache sur un coin de table :))

function is_luhn($numero)
{
    $sum = 0;
    for ($i = strlen($numero) - 1; $i >= 0; $i--)
    {
        $mult = ((strlen($numero) - $i)%2 == 0) ? 2 : 1;
        $number = (string)($numero$i] * $mult);
        if (strlen($number) > 1)
        {
            for ($j=0; $j < strlen($number); $j++)
                $sum += (int)$number$j];
        }
        else
        {
            $sum += (int)$number;
        }
    }
    return ($sum%10 == 0);
}

Voilà avec ça tu es capable de savoir si un SIREN et/ou un SIRET son valide sur la structure.

Si je me suis trompé ou si je ne répond pas à ta question n'hésites pas ;).

Merci déjà pour tous cela c très cool. je vais essayer de continuer .

Quand tu me dit que tu as fais cela sur un bout de table tu me décourage XD

Toute remarque est la bienvenue et Merci pour le coup de main

De rien camarade pas de soucis ;)

Et juste un nouveau truc de ckae 2.1

Validation::luhn(string|array $check, boolean $deep = false)
The Luhn algorithm: A checksum formula to validate a variety of identification numbers.

A voir pour plus-tard

et encore merci