Regex CNPJ laravel
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
Clique aqui para fazer login e interagir na Comunidade :)