=D
Como validar o campo CPF retornando 0 para CPF invalido e 1 para CPF valido. A sentença foi feita em MySQL 5.0 em diante.
DELIMITER $$ CREATE FUNCTION `fc_validarCPF`(CPF CHAR(20)) RETURNS int(11) BEGIN DECLARE INDICE INT; DECLARE SOMA INT; DECLARE DIG1 INT; DECLARE DIG2 INT; DECLARE CPF_TEMP VARCHAR(11); DECLARE DIGITOS_IGUAIS CHAR(1); DECLARE DIGITOS_DIFERENTE_11 CHAR(1); DECLARE RESULTADO INT; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN RETURN 0; END; SET RESULTADO = 0; SET INDICE = 1; SET DIGITOS_IGUAIS = 'S'; SET DIGITOS_DIFERENTE_11 = 'S'; SET CPF_TEMP = SUBSTRING(CPF,1,1); IF(CHAR_LENGTH(CPF) = 11) THEN SET DIGITOS_DIFERENTE_11 = 'N'; END IF; IF(DIGITOS_DIFERENTE_11 = 'N') THEN /* Verificando há caracteres iguais. */ WHILE (INDICE <= 11) DO IF (SUBSTRING(CPF,INDICE,1) <> CPF_TEMP) THEN SET DIGITOS_IGUAIS = 'N'; END IF; SET INDICE = INDICE + 1; END WHILE; END IF; /*Caso os dígitos não sejam todos iguais Começo o calculo do dígitos*/ IF (DIGITOS_IGUAIS = 'N') THEN /*Cálculo do 1º dígito*/ SET SOMA = 0; SET INDICE = 1; WHILE (INDICE <= 9) DO SET Soma = Soma + CAST(SUBSTRING(CPF,INDICE,1) AS UNSIGNED) * (11 - INDICE); SET INDICE = INDICE + 1; END WHILE; SET DIG1 = 11 - (SOMA % 11); IF (DIG1 > 9) THEN SET DIG1 = 0; END IF; -- Cálculo do 2º dígito } SET SOMA = 0; SET INDICE = 1; WHILE (INDICE <= 10) DO SET Soma = Soma + CAST(SUBSTRING(CPF,INDICE,1) AS UNSIGNED) * (12 - INDICE); SET INDICE = INDICE + 1; END WHILE; SET DIG2 = 11 - (SOMA % 11); IF DIG2 > 9 THEN SET DIG2 = 0; END IF; -- Validando IF (DIG1 = SUBSTRING(CPF,LENGTH(CPF)-1,1)) AND (DIG2 = SUBSTRING(CPF,LENGTH(CPF),1)) THEN SET RESULTADO = 1; ELSE SET RESULTADO = 0; END IF; END IF; RETURN RESULTADO; END $$ DELIMITER ; |
Vitor Yudi Hansen