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.
1
11.111.111/1111-11
Romulo Sousa

Romulo Sousa

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

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

Joel Sousa
Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar