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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
FUNCTION EstSiretValide(Siret varchar(255))
RETURNS tinyint(1)
BEGIN
DECLARE somme int;
DECLARE tmp int;
DECLARE I int;
-- Suppression des espaces inutiles
SET Siret = REPLACE(Siret, ' ', '');
SET somme = 0;
-- Longueur 14 obligatoirement et QUE des chiffres
IF Siret REGEXP '^[0-9]{14}$' = FALSE THEN
RETURN FALSE;
END IF;
SET I = 1;
Loop_Label: LOOP
IF (I % 2) = 1 THEN
SET tmp = CAST(SUBSTRING(Siret, I, 1) AS UNSIGNED) * 2;
IF tmp > 9 THEN
SET tmp = tmp - 9;
END IF;
ELSE
SET tmp = CAST(SUBSTRING(Siret, 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;
ELSE
-- Vérification pour les SIRET de la poste
SET somme =
CAST(SUBSTRING(Siret, 1, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 2, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 3, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 4, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 5, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 6, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 7, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 8, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 9, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 10, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 11, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 12, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 13, 1) AS UNSIGNED) +
CAST(SUBSTRING(Siret, 14, 1) AS UNSIGNED);
IF (somme % 5) = 0 THEN
RETURN TRUE;
END IF;
END IF;
RETURN FALSE;
END |
Partager