Juste pour partager le résultat de mon casse-tête

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
43
44
45
46
47
48
49
50
51
52
53
 
 
CREATE DEFINER = 'root'@'%'
FUNCTION EstSiretValide(Siret varchar(255))
  RETURNS tinyint(1)
BEGIN
  DECLARE somme bigint;
  DECLARE tmp bigint;
  DECLARE LongueurSiret int;
  DECLARE I int;
  DECLARE S varchar(255);
  DECLARE C char;
 
  SET S = TRIM(Siret);
  SET somme = 0;
 
  -- Longueur 14 obligatoirement et QUE des chiffres
  IF S REGEXP '^[0-9]{14}$' = FALSE THEN  
    RETURN FALSE;
  END IF;
 
  SET I = 1;
  Loop_Label: LOOP
 
    IF (I % 2) = 1 THEN
 
      SET C = SUBSTRING(S, I, 1);      
      SET tmp = CAST(C AS UNSIGNED) * 2;
 
      IF tmp > 9 THEN
        SET tmp = tmp - 9;
      END IF;
 
    ELSE 
      SET tmp = CAST( SUBSTRING(S, I, 1) AS UNSIGNED);
    END IF;
 
    SET somme = somme + tmp;
 
    IF I = 14 THEN
      LEAVE `Loop_Label`;
    END IF;
 
    SET I = I + 1;
  END LOOP;
 
  IF (somme % 10) = 0 THEN
    RETURN TRUE;
  END IF;
 
  RETURN FALSE;
 
END