Validando CPF e CNPJ com PHP

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));

 

}

}

 

Outros conteudos que podem ser de seu interesse

Combinação e sorteio de números com PHP
10/11/2024PHP

Combinação e sorteio de números com PHP

Veja exemplos práticos de combinações e sorteio de números com PHP

Saiba mais...
Enviar e-mails com anexos utilizando PHP
20/08/2023PHP

Enviar e-mails com anexos utilizando PHP

Veja duas formas de enviar e-mails com anexos utilizando PHP

Saiba mais...

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