DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` FUNCTION `vn`.`testNIF`(vNIF VARCHAR(9)) RETURNS tinyint(1) DETERMINISTIC BEGIN DECLARE vIndice INT; DECLARE vParteNumerica DECIMAL(8,0); DECLARE vLetra VARCHAR(1); DECLARE vLetrasPosibles VARCHAR(24) DEFAULT "TRWAGMYFPDXBNJZSQVHLCKE"; SET vLetra = SUBSTRING(vNIF, 9, 1); SET vParteNumerica = CAST(SUBSTRING(vNIF, 1, 8) AS DECIMAL(8,0)); SET vIndice = Round(vParteNumerica MOD 23, 0) + 1; If SUBSTRING(vLetrasPosibles, vIndice, 1) = vLetra Then RETURN TRUE; ELSE RETURN FALSE; END IF; END$$ DELIMITER ;