56 lines
1.2 KiB
SQL
56 lines
1.2 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`vn`@`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 ;
|