Fórum Regex CNPJ laravel #598344
01/11/2018
0
Ola devs, quero criar uma regex para validar o CNPJ de uma empresa, sendo que quero barrar tbm os numeros repetidos, como fazer?
Exemplo.
Exemplo.
11.111.111/1111-11
Romulo Sousa
Curtir tópico
+ 0
Responder
Post mais votado
03/11/2018
Boa noite!
Romulo27, acho que além do regex você terá que usar um script em php seguindo o algorítimo do cnpj.
Observação: Esse código é compatível com PHP >= 7.0
Na linha 3, verificamos se uma string foi passada como parâmetro. Caso negativo, o script retorna false.
Na linha 8, removemos todos os caracteres não númericos do CNPJ passado como parâmetro, eliminando uma possível máscara contendo "." e "-".
Na linha 13 verificamos se, após a limpeza da string, temos o número correto de caracteres (14) na string restante.
Caso a verificação seja verdadeira, verificamos com o else if da linha 18 se o CNPJ informado é composto por valores iguais. Essa checagem é necessária pois, se aplicarmos o algoritmo do CNPJ sobre um número todo igual como "33.333.333-3333/33", teoricamente os dígitos verificadores estão corretos, mesmo este NÃO sendo um número válido.
As linha 31 em diante calculam os dígitos verificadores de acordo com o algoritmo do CNPJ.
Ao final, na instrução return temos o teste lógico para saber se os dígitos informados são iguais aos computados. Caso afirmativo, temos um CNPJ válido e o boolean true é retornado. Caso negativo, false é retornado.
Espero ter ajudado!
Romulo27, acho que além do regex você terá que usar um script em php seguindo o algorítimo do cnpj.
Observação: Esse código é compatível com PHP >= 7.0
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);
// Verifica se o numero de digitos informados é igual a 11
if (strlen($cnpj) != 14) {
return false;
}
// Verifica se nenhuma das sequências invalidas abaixo
// foi digitada. Caso afirmativo, retorna falso
else if ($cnpj == '00000000000000' ||
$cnpj == '11111111111111' ||
$cnpj == '22222222222222' ||
$cnpj == '33333333333333' ||
$cnpj == '44444444444444' ||
$cnpj == '55555555555555' ||
$cnpj == '66666666666666' ||
$cnpj == '77777777777777' ||
$cnpj == '88888888888888' ||
$cnpj == '99999999999999') {
return false;
// Calcula os digitos verificadores para verificar se o
// CPF é válido
} else {
$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 == $digito1) and ($cnpj == $digito2));
}
}Na linha 3, verificamos se uma string foi passada como parâmetro. Caso negativo, o script retorna false.
Na linha 8, removemos todos os caracteres não númericos do CNPJ passado como parâmetro, eliminando uma possível máscara contendo "." e "-".
Na linha 13 verificamos se, após a limpeza da string, temos o número correto de caracteres (14) na string restante.
Caso a verificação seja verdadeira, verificamos com o else if da linha 18 se o CNPJ informado é composto por valores iguais. Essa checagem é necessária pois, se aplicarmos o algoritmo do CNPJ sobre um número todo igual como "33.333.333-3333/33", teoricamente os dígitos verificadores estão corretos, mesmo este NÃO sendo um número válido.
As linha 31 em diante calculam os dígitos verificadores de acordo com o algoritmo do CNPJ.
Ao final, na instrução return temos o teste lógico para saber se os dígitos informados são iguais aos computados. Caso afirmativo, temos um CNPJ válido e o boolean true é retornado. Caso negativo, false é retornado.
Espero ter ajudado!
Joel Sousa
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)