Validando CPF e CNPJ com PHP

 

Neste artigo você vai ver como criar duas funções em PHP para validar o número do CPF e do CNPJ.

 

A lógica de validação destes dois documentos é parecida. Os dois últimos números são chamados de dígitos verificadores. São feitas operações com os demais números, e o resultado deve ser igual aos dígitos verificadores.

 

Para saber em detalhes as regras de validação, consulte os links a seguir:

 

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

 

Como funciona a lógica da validação do CNPJ

 

Ambas as funções tem uma estrutura parecida. Vamos pegar como exemplo a função que vai validar o CPF

 

function validaCPF($cpf = null) {

//Programação a ser inserida

}

 

A função vai retornar TRUE se o número informado for válido, e false se for errado ou não tiver sido informado.

 

A primeira validação é conferir se um número foi informado

 

if(empty($cpf)) {

return false;

}

 

Se um número tiver sido informado, são retirados os pontos, traços e barras, desta forma são mantidos apenas o números informados. Se a quantidade de números for menor que o padrão, se completa com zeros a esquerda.

 

$cpf = preg_replace("/[^0-9]/", "", $cpf);

$cpf = str_pad($cpf, 11, '0', STR_PAD_LEFT);

 

Tanto o CPF quanto o CNPJ não podem ser compostos apenas de números repetidos.

$repeticoes = array('00000000000','11111111111','22222222222','33333333333','44444444444','55555555555','66666666666','77777777777','88888888888','99999999999');

if (in_array($cpf, $repeticoes)) {

return false;

 }

 

 Se o número tiver o tamanho correto, se faz a verificação para validar o número em relação ao seu dígito verificador

 

if (in_array($cpf, $repeticoes)) {

return false;

} else {   

       // Calcula os digitos verificadores para verificar se o CPF é válido

for ($t = 9; $t < 11; $t++) {

for ($d = 0, $c = 0; $c < $t; $c++) {

$d += $cpf{$c} * (($t + 1) - $c);

}

$d = ((10 * $d) % 11) % 10;

if ($cpf{$c} != $d) {

return false;

}

}

return true;

}

 

Para concluir o artigo, vamos ver as duas funções completas.

 

Função PHP para validar o CPF

function validaCPF($cpf = null) {

// Verifica se um número foi informado

if(empty($cpf)) {

return false;

}

// Elimina a mascara

$cpf = preg_replace("/[^0-9]/", "", $cpf);

$cpf = str_pad($cpf, 11, '0', STR_PAD_LEFT);

$repeticoes = array('00000000000','11111111111','22222222222','33333333333','44444444444','55555555555','66666666666','77777777777','88888888888','99999999999');

// Verifica se nenhuma das sequências invalidas abaixo foi digitada. Caso afirmativo, retorna falso

if (in_array($cpf, $repeticoes)) {

return false;

} else {   

// Calcula os digitos verificadores para verificar se o CPF é válido

for ($t = 9; $t < 11; $t++) {

for ($d = 0, $c = 0; $c < $t; $c++) {

$d += $cpf{$c} * (($t + 1) - $c);

}

$d = ((10 * $d) % 11) % 10;

if ($cpf{$c} != $d) {

return false;

}

}

return true;

}

}

 

Função PHP para validar o CNPJ

 

function validaCNPJ($cnpj = null) {

// Verifica se um número foi informado

if(empty($cnpj)) {

return false;

}

// Elimina possivel mascara

$cnpj = preg_replace("/[^0-9]/", "", $cnpj);

$cnpj = str_pad($cnpj, 14, '0', STR_PAD_LEFT);

$repeticoes = array('00000000000000','11111111111111','22222222222222','33333333333333','44444444444444','55555555555555','66666666666666','77777777777777','88888888888888','99999999999999');

// Verifica se nenhuma das sequências invalidas abaixo foi digitada. Caso afirmativo, retorna falso

if (in_array($$cnpj, $repeticoes)) {

return false;

} else {   

// Calcula os digitos verificadores para verificar se o CNPJ é válido

$j = 5;

$k = 6;

$soma1 = "";

$soma2 = "";

for ($i = 0; $i < 13; $i++) {

$j = $j == 1 ? 9 : $j;

$k = $k == 1 ? 9 : $k;

$soma2 += ($cnpj{$i} * $k);

if ($i < 12) {

$soma1 += ($cnpj{$i} * $j);

}

$k--;

$j--;

}

$digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11;

$digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11;

return (($cnpj{12} == $digito1) and ($cnpj{13} == $digito2));

 

}

}

 

Quer conferir mais dicas sobre PHP? Clique aqui e veja mais dicas!
BINS - Blog PHP

 

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