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
Partager