return: integer
|
|
lang: plpgsql
|
|
parameters:
|
|
p0:
|
|
type: text
|
|
name: i_matricule
|
|
p1:
|
|
type: text
|
|
name: i_cle
|
|
src: |
|
|
DECLARE
|
|
o_code_erreur integer;
|
|
matricule_a text;
|
|
matricule_n numeric;
|
|
cle_n numeric;
|
|
BEGIN
|
|
o_code_erreur = 0;
|
|
-- longueur matricule
|
|
IF (length(i_matricule) <> 13) THEN
|
|
o_code_erreur = 1;
|
|
RETURN o_code_erreur;
|
|
END IF;
|
|
-- longueur clé
|
|
IF (length(i_cle) <> 2) THEN
|
|
o_code_erreur = 2;
|
|
RETURN o_code_erreur;
|
|
END IF;
|
|
-- Remplacement 2A, 2B (corse)
|
|
matricule_a = replace(i_matricule, '2A', '19');
|
|
matricule_a = replace(matricule_a, '2B', '18');
|
|
-- Matricule numerique
|
|
matricule_n = to_number(matricule_a || '0','99999999999999') / 10;
|
|
if (trim(to_char(matricule_n,'9999999999999')) <> matricule_a) THEN
|
|
o_code_erreur = 3;
|
|
RETURN o_code_erreur;
|
|
END IF;
|
|
-- calcul cle
|
|
cle_n = 97 - (matricule_n % 97);
|
|
if (cle_n > 100 OR cle_n < 0) THEN
|
|
o_code_erreur = 4;
|
|
RETURN o_code_erreur;
|
|
END IF;
|
|
|
|
if (trim(to_char(cle_n,'00')) <> i_cle) THEN
|
|
o_code_erreur = 5;
|
|
RETURN o_code_erreur;
|
|
END IF;
|
|
|
|
RETURN o_code_erreur;
|
|
END;
|