DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `vn`.`testNIE`(vNIE VARCHAR(9))
	RETURNS tinyint(1)
	DETERMINISTIC
BEGIN
	
	DECLARE vIndice INT;
	DECLARE vNumero VARCHAR(7);
	DECLARE vOperador VARCHAR(9);
	DECLARE vParteNumerica DECIMAL(8,0);
	DECLARE vLetraInicial VARCHAR(1);
	DECLARE vLetraFinal VARCHAR(1);
	DECLARE vLetrasFinalesPosibles VARCHAR(24) DEFAULT "TRWAGMYFPDXBNJZSQVHLCKE";
	DECLARE vLetraInicialEsIncorrecta BOOL DEFAULT FALSE;
	 
	SET vLetraInicial = SUBSTR(vNIE, 1, 1);
	SET vLetraFinal = SUBSTR(vNIE, 9, 1);
	SET vNumero = SUBSTR(vNIE, 2, 7);

 	CASE vLetraInicial
    
	   WHEN 'X' THEN
	   
	        SET vOperador = "0";
	        
	   WHEN 'Y' THEN
	   
	        SET vOperador = "1";
	        
	   WHEN 'Z' THEN
	   
	        SET vOperador = "2";
	       
	   ELSE
	   
	   		SET vLetraInicialEsIncorrecta = TRUE;
    
   	END CASE;
    
   	SET vOperador = CONCAT(vOperador, vNumero);
    SET vParteNumerica = CAST(vOperador AS DECIMAL(8,0));
    SET vIndice = Round(vParteNumerica Mod 23, 0) + 1;

   	IF SUBSTR(vLetrasFinalesPosibles, vIndice, 1) = vLetraFinal AND vLetraInicialEsIncorrecta = FALSE THEN
    
   		RETURN TRUE;
   	
   	ELSE
   	
   		RETURN FALSE;
   	
   	END IF;
   
END$$
DELIMITER ;
