segunda-feira, 11 de julho de 2011

Validar CPF MySQL

Vou postar uma função que valida CPF através do MySQL
=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