-
-
Save guisehn/3276302 to your computer and use it in GitHub Desktop.
<?php | |
function validar_cnpj($cnpj) | |
{ | |
$cnpj = preg_replace('/[^0-9]/', '', (string) $cnpj); | |
// Valida tamanho | |
if (strlen($cnpj) != 14) | |
return false; | |
// Verifica se todos os digitos são iguais | |
if (preg_match('/(\d)\1{13}/', $cnpj)) | |
return false; | |
// Valida primeiro dígito verificador | |
for ($i = 0, $j = 5, $soma = 0; $i < 12; $i++) | |
{ | |
$soma += $cnpj[$i] * $j; | |
$j = ($j == 2) ? 9 : $j - 1; | |
} | |
$resto = $soma % 11; | |
if ($cnpj[12] != ($resto < 2 ? 0 : 11 - $resto)) | |
return false; | |
// Valida segundo dígito verificador | |
for ($i = 0, $j = 6, $soma = 0; $i < 13; $i++) | |
{ | |
$soma += $cnpj[$i] * $j; | |
$j = ($j == 2) ? 9 : $j - 1; | |
} | |
$resto = $soma % 11; | |
return $cnpj[13] == ($resto < 2 ? 0 : 11 - $resto); | |
} | |
var_dump(validar_cnpj('11.444.777/0001-61')); |
Nice!
Muito bom!
VALEW!
(y)
// Verifica se todos os digitos são iguais
if (preg_match('/(\d)\1{13}/', $cnpj))
return false;
tks
Muito bom, tnks.
Muito bom rapaz... funciona perfeito. Adiciona o complemento do @apandrade que fica perfeito!
Valeu galera do bem!
Top! Obrigado!
Valeu!
Show! Valeu!
Muito bom, só faltou invalidar as sequências:
// Lista de CNPJs inválidos $invalidos = [ '00000000000000', '11111111111111', '22222222222222', '33333333333333', '44444444444444', '55555555555555', '66666666666666', '77777777777777', '88888888888888', '99999999999999' ]; // Verifica se o CNPJ está na lista de inválidos if (in_array($cnpj, $invalidos)) { return false; }
Não precisa, o if (preg_match('/(\d)\1{13}/', $cnpj))
já resolve isto.
funcionou valeu
👍
Não funciona no php 7.4
Array and string offset access syntax with curly braces is deprecated
Não funciona no php 7.4
Array and string offset access syntax with curly braces is deprecated
só trocar os curly braces por chaves nas linhas 18, 30 e 36
Resolvido para PHP 7.4. Testei e estou utilizando o código com a API pagarme. 100% aprovado.
$cnpj = preg_replace( '/[^0-9]/is', '', $cnpj );
// Valida primeiro dígito verificador
for ($i = 0, $j = 5, $soma = 0; $i < 12; $i++)
{
$soma += (int)$cnpj[$i] * $j;
$j = ($j == 2) ? 9 : $j - 1;
}
$resto = $soma % 11;
if ($cnpj[12] != ($resto < 2 ? 0 : 11 - $resto))
return false;
// Valida segundo dígito verificador
for ($i = 0, $j = 6, $soma = 0; $i < 13; $i++)
{
$soma += (int)$cnpj[$i] * $j;
$j = ($j == 2) ? 9 : $j - 1;
}
$resto = $soma % 11;
return $cnpj[13] == ($resto < 2 ? 0 : 11 - $resto);
Olá, tudo bom?
Deixo aqui uma pequena contribuição como forma de agradecimento!
/**
* Valida CPNJ
* @param string $document
* @return bool
*/
function is_cnpj(string $document): bool
{
// Extrai os números
$cnpj = preg_replace('/[^0-9]/is', '', $document);
// Valida tamanho
if (strlen($cnpj) != 14) {
return false;
}
// Verifica sequência de digitos repetidos. Ex: 11.111.111/111-11
if (preg_match('/(\d)\1{13}/', $cnpj)) {
return false;
}
// Valida dígitos verificadores
for ($t = 12; $t < 14; $t++) {
for ($d = 0, $m = ($t - 7), $i = 0; $i < $t; $i++) {
$d += $cnpj[$i] * $m;
$m = ($m == 2 ? 9 : --$m);
}
$d = ((10 * $d) % 11) % 10;
if ($cnpj[$i] != $d) {
return false;
}
}
return true;
}
Muito obrigado!
Obrigado me ajudou muito!
Muito obrigado, Ajudou demais !
Olá, tudo bom?
Deixo aqui uma pequena contribuição como forma de agradecimento!/** * Valida CPNJ * @param string $document * @return bool */ function is_cnpj(string $document): bool { // Extrai os números $cnpj = preg_replace('/[^0-9]/is', '', $document); // Valida tamanho if (strlen($cnpj) != 14) { return false; } // Verifica sequência de digitos repetidos. Ex: 11.111.111/111-11 if (preg_match('/(\d)\1{13}/', $cnpj)) { return false; } // Valida dígitos verificadores for ($t = 12; $t < 14; $t++) { for ($d = 0, $m = ($t - 7), $i = 0; $i < $t; $i++) { $d += $cnpj[$i] * $m; $m = ($m == 2 ? 9 : --$m); } $d = ((10 * $d) % 11) % 10; if ($cnpj[$i] != $d) { return false; } } return true; }
top tbm
Obrigado
Ótimo, Obrigado !!
public static function verificaCnpj(string $cnpj)
{
$url = "https://www.receitaws.com.br/v1/cnpj/" . $cnpj;
$json = file_get_contents($url);
return json_decode($json);
}
public static function verificaCnpj(string $cnpj) { $url = "https://www.receitaws.com.br/v1/cnpj/" . $cnpj; $json = file_get_contents($url); return json_decode($json); }
Show
Contribuindo com a resposta do @douglasisraelbonfim
use Illuminate\Support\Facades\Http;
public static function verificaCnpj(string $cnpj): array
{
$result = Http::get("https://www.receitaws.com.br/v1/cnpj/" . $cnpj);
return $result->json();
}
Olá, tudo bom? Deixo aqui uma pequena contribuição como forma de agradecimento!
/** * Valida CPNJ * @param string $document * @return bool */ function is_cnpj(string $document): bool { // Extrai os números $cnpj = preg_replace('/[^0-9]/is', '', $document); // Valida tamanho if (strlen($cnpj) != 14) { return false; } // Verifica sequência de digitos repetidos. Ex: 11.111.111/111-11 if (preg_match('/(\d)\1{13}/', $cnpj)) { return false; } // Valida dígitos verificadores for ($t = 12; $t < 14; $t++) { for ($d = 0, $m = ($t - 7), $i = 0; $i < $t; $i++) { $d += $cnpj[$i] * $m; $m = ($m == 2 ? 9 : --$m); } $d = ((10 * $d) % 11) % 10; if ($cnpj[$i] != $d) { return false; } } return true; }
Sensacional, ficou simples, valeu! (gostei como vc resolveu as sequencias inválidas)
Muito bom! Valeu, obrigado!