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;