Validar CPF com MySQL

 

Neste artigo, você vai ver como é possível validar números de CPF utilizando o MySQL.

A validação de dados é algo que deve ser feito pelo frontend do seu sistema, mas, é comum ocorrer casos onde se recebe uma base existente onde os dados não foram validados. 

O CPF é formado por 11 dígitos numéricos que seguem o formato "###.###.###-##". A validação é feita utilizando os 9 primeiros dígitos e através de um cálculo simples, se valida se o resultado corresponde aos dois últimos números.

Caso você queira entender com detalhes qual a lógica utilizada para validar um CPF, pode dar uma olhada neste artigo que eu escrevi, lá eu explico como a validação é feita.

Como funciona a lógica de validação do CPF?

Vamos criar uma tabela de testes para armazenar nossos CPFs.

CREATE TABLE CPF(

id INT NOT NULL AUTO_INCREMENT,

CPF VARCHAR(11) NOT NULL,

PRIMARY KEY (id)

);

 

Vamos popular a tabela com números de CPFs aleatórios. Para isso, vamos utilizar este site:

 

https://www.4devs.com.br/gerador_de_cpf

 

Gerei 3 números de CPF, o primeiro, o terceiro e o quinto são números válidos, os demais tem erros. Em nosso exemplo, os CPFs estarão armazenados sem pontos ou traços. Vamos inserir estes números em nossa tabela.

 

INSERT INTO CPF (CPF) VALUES ('75392083099');

INSERT INTO CPF (CPF) VALUES ('75392081099');

INSERT INTO CPF (CPF) VALUES ('31804409022');

INSERT INTO CPF (CPF) VALUES ('31804409021');

INSERT INTO CPF (CPF) VALUES ('17387354006');

INSERT INTO CPF (CPF) VALUES ('27387354006');

 

Agora, vamos criar uma função, para poder reaproveitar esta lógica no futuro. Abra uma nova janela de consulta e execute o seguinte código:

DELIMITER $

CREATE FUNCTION validar_CPF(CPF CHAR(11)) RETURNS INT

BEGIN

    DECLARE SOMA INT;

    DECLARE INDICE INT;

    DECLARE DIGITO_1 INT;

    DECLARE DIGITO_2 INT;

    DECLARE NR_DOCUMENTO_AUX VARCHAR(11);

    DECLARE DIGITO_1_CPF CHAR(2);

    DECLARE DIGITO_2_CPF CHAR(2);

    /*

    Remove os CPFs onde todos os números são iguais

    */

    SET NR_DOCUMENTO_AUX = LTRIM(RTRIM(CPF));

    IF (NR_DOCUMENTO_AUX IN ('00000000000', '11111111111', '22222222222', '33333333333', '44444444444', '55555555555', '66666666666', '77777777777', '88888888888', '99999999999', '12345678909')) THEN

        RETURN 0;

    END IF;

   /*

   O CPF deve ter 11 caracteres 

   */

    IF (LENGTH(NR_DOCUMENTO_AUX) <> 11) THEN

        RETURN 0;

    ELSE 

/* 

   Armazendo os digitos verificadores do CPF informado 

   */

   SET DIGITO_1_CPF = SUBSTRING(NR_DOCUMENTO_AUX,LENGTH(NR_DOCUMENTO_AUX)-1,1);

   SET DIGITO_2_CPF = SUBSTRING(NR_DOCUMENTO_AUX,LENGTH(NR_DOCUMENTO_AUX),1);

/*Cálculo do primeiro dígito verificador*/

        SET SOMA = 0;

        SET INDICE = 1;

        WHILE (INDICE <= 9) DO          

            SET Soma = Soma + CAST(SUBSTRING(NR_DOCUMENTO_AUX,INDICE,1) AS UNSIGNED) * (11 - INDICE);             

            SET INDICE = INDICE + 1;      

         END WHILE;      

         SET DIGITO_1 = 11 - (SOMA % 11);      

         IF (DIGITO_1 > 9) THEN

            SET DIGITO_1 = 0;

         END IF;

        /* Cálculo do segundo dígito verificador */

        SET SOMA = 0;

        SET INDICE = 1;

        WHILE (INDICE <= 10) DO

             SET Soma = Soma + CAST(SUBSTRING(NR_DOCUMENTO_AUX,INDICE,1) AS UNSIGNED) * (12 - INDICE);              

             SET INDICE = INDICE + 1;

        END WHILE;

        SET DIGITO_2 = 11 - (SOMA % 11);

        IF DIGITO_2 > 9 THEN

            SET DIGITO_2 = 0;

        END IF;

        /* Validando os digitos verificadores calculados com os digitos verificadores do CPF informado */

        IF (DIGITO_1 = DIGITO_1_CPF) AND (DIGITO_2 = DIGITO_2_CPF) THEN

            RETURN 1;

        ELSE

            RETURN 0;

        END IF;

 END IF;

END;

$

 

Agora vamos testar a nossa função, para fazer isso, faremos a seguinte consulta:

 

SELECT CPF, validar_CPF(CPF) as resultado FROM CPF

 

Perceba que na coluna resultado foi retornado 1 para os CPFs válidos e 0 para os inválidos. Se você quiser ver somente os válidos, poderia fazer a consulta desta forma:

 

select CPF from CPF where validar_CPF(CPF) = 1

 

Se você deseja aprender como fazer a validação do CPF utilizando o SQL Server, consulte o link a seguir

Validar CPF com SQL Server

 

 

Quer conferir mais dicas sobre banco de dados? Clique aqui e veja mais dicas!
BINS - Blog SQL

 

Conteúdo sobre banco de dados sem complicação!

MySQL - Referência Rápida

 

SQL Server - Referência Rápida

 

SQL vs Mongo

 

 

 

Veja outros conteúdos que podem ser de seu interesse