Bonjour à tou(te)s

Je viens d'écrire une petite fonction pour vérifier la validité d'un SIRET en me basant sur un code JavaScript trouvé sur le net.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
FUNCTION EstSiretValide(Siret varchar(255))
  RETURNS tinyint(1)
BEGIN
  DECLARE somme int;
  DECLARE tmp int;
  DECLARE LongueurSiret int;
  DECLARE I int;
 
  -- Longueur 14 obligatoirement et QUE des chiffres
  IF Siret REGEXP '^[0-9]{14}$' = FALSE THEN  
    RETURN FALSE;
  END IF;
 
  SET I = 0;
  Loop_Label: LOOP
 
    IF (I % 2) = 1 THEN
      SET tmp = CAST( SUBSTRING(Siret, I) AS SIGNED) * 2;
 
      IF tmp > 9 THEN
        SET tmp = tmp - 9;
      END IF;
 
    ELSE 
      SET tmp = CAST( SUBSTRING(Siret, I) AS SIGNED);
    END IF;
 
    SET somme = somme + tmp;
 
    IF I = 14 THEN
      LEAVE `Loop_Label`;
    END IF;
 
    SET LongueurSiret = LongueurSiret + 1;
  END LOOP;
 
  IF (somme % 10) = 0 THEN
    RETURN TRUE;
  END IF;
 
  RETURN FALSE;
END
Pour la tester, je fais:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT EstSiretValide("79942059100015");
Et là, je récolte une erreur
"Truncated incorrect INTEGER value"
Si je supprime le premier chiffre du paramètre, plus d'erreur.

Quelqu'un saurait-il me dire le pourquoi du comment svp ?

Merci d'avance,



oups /// Trouvé :-(

Je n'incrémente pas la bonne valeur dans la boucle : SET LongueurSiret = LongueurSiret + 1; au lieu de SET I = I + 1;.


Désolé