Categorias

Validar CNPJ com expressão regular

Esta função é muito útil para a validação do CNPJ passado por parâmetro.

A função também verifica se o CNPJ está no formato correto utilizando Expressão Regular.

Na função o CNPJ pode ser digitado em 2 formatos diferentes:
XX.XXX.XXX/XXXX-XX OU XXXXXXXXXXXXXX.

<%
'-----------------------------------------------------
'Funcao: IsCNPJ(ByVal intNumero)
'Sinopse: Verifica se o valor passado é um CNPJ válido
'          Formatos aceitos: XX.XXX.XXX/XXXX-XX ou
'                            XXXXXXXXXXXXXX
'Parametro: intNumero
'Retorno: Booleano
'Autor: Gabriel Fróes - www.codigofonte.com.br
'-----------------------------------------------------
Function IsCNPJ(ByVal intNumero)
    'Validando o formato do CNPJ com expressão regular
    Set regEx = New RegExp                                'Cria o Objeto Expressão
    regEx.Pattern = "d{2}.?d{3}.?d{3}/?d{4}-?d{2}"    ' Expressão Regular
    regEx.IgnoreCase = True                                ' Sensitivo ou não
    regEx.Global = True
    Retorno = RegEx.Test(intNumero)
    Set regEx = Nothing
    
    'Caso seja verdadeiro posso validar se o CNPJ é válido
    If Retorno = True Then
        'Validando a sequencia números
        Dim CNPJ_temp
        CNPJ_temp            = intNumero
        CNPJ_temp            = Replace(CNPJ_temp, ".", "")
        CNPJ_temp            = Replace(CNPJ_temp, "/", "")
        CNPJ_temp            = Replace(CNPJ_temp, "-", "")
        CNPJ_Digito_temp    = Right(CNPJ_temp, 2)
        
        'Somando os 12 primeiros digitos do CNPJ 
        Soma    = (Clng(Mid(CNPJ_temp,1,1)) * 5) + (Clng(Mid(CNPJ_temp,2,1)) * 4) + (Clng(Mid(CNPJ_temp,3,1)) * 3) + (Clng(Mid(CNPJ_temp,4,1)) * 2) + (Clng(Mid(CNPJ_temp,5,1)) * 9) + (Clng(Mid(CNPJ_temp,6,1)) * 8)+ (Clng(Mid(CNPJ_temp,7,1)) * 7) + (Clng(Mid(CNPJ_temp,8,1)) * 6) + (Clng(Mid(CNPJ_temp,9,1)) * 5) + (Clng(Mid(CNPJ_temp,10,1)) * 4) + (Clng(Mid(CNPJ_temp,11,1)) * 3) + (Clng(Mid(CNPJ_temp,12,1)) * 2)
        '----------------------------------
        'Calculando o 1º dígito verificador
        '----------------------------------
        'Pegando o resto da divisão por 11
        Resto    = (Soma Mod 11)
        If Resto < 2 Then
            DigitoHum = 0
        Else
            DigitoHum = Cstr(11-Resto)
        End If
        '----------------------------------
        '----------------------------------
        'Calculando o 2º dígito verificador
        '----------------------------------
        'Somando os 12 primeiros digitos do CNPJ mais o 1º dígito
        Soma    = (Clng(Mid(CNPJ_temp,1,1)) * 6) + (Clng(Mid(CNPJ_temp,2,1)) * 5) + (Clng(Mid(CNPJ_temp,3,1)) * 4) + (Clng(Mid(CNPJ_temp,4,1)) * 3) + (Clng(Mid(CNPJ_temp,5,1)) * 2) + (Clng(Mid(CNPJ_temp,6,1)) * 9) + (Clng(Mid(CNPJ_temp,7,1)) * 8) + (Clng(Mid(CNPJ_temp,8,1)) * 7) + (Clng(Mid(CNPJ_temp,9,1)) * 6) + (Clng(Mid(CNPJ_temp,10,1)) * 5) + (Clng(Mid(CNPJ_temp,11,1)) * 4) + (Clng(Mid(CNPJ_temp,12,1)) * 3) + (DigitoHum * 2)
        'Pegando o resto da divisão por 11
        Resto    = (Soma Mod 11)
        
        If Resto < 2 Then
            DigitoDois = 0
        Else
            DigitoDois = Cstr(11-Resto)
        End If
        '----------------------------------
        'Verificando se os digitos são iguais aos digítados.
        DigitoCNPJ = Cstr(DigitoHum) & Cstr(DigitoDois)
        If Cstr(CNPJ_Digito_temp) = Cstr(DigitoCNPJ) Then
            Retorno = True
        Else
            Retorno = False
        End If
    End If
    IsCNPJ = Retorno
End Function
%>