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;