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.
1 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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 :)