Validação CPF e CNP...
 
Notifications
Clear all

Validação CPF e CNPJ

6 Posts
2 Usuários
0 Reactions
1,798 Visualizações
(@gabrielcj)
Posts: 19
Eminent Member
Topic starter
 

Bom dia meus camaradas,

É o seguinte a minha estrutura é a seguinte, Tenho no meu FORM (1 comboBox, 1 TextBox) e possuo tbem um Módulo Auxiliar, segue o código abaixo da estrutura.

Private Sub UserForm_Initialize()

    
    'preenche a cboCnpjCpf
    cboCnpjCpf.AddItem "Física"
    cboCnpjCpf.AddItem "Jurídica"

End Sub

==============================

Private Sub txtCnpjCpf_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case 8, 48 To 57
                If Me.cboCnpjCpf.Text = "Jurídica" Then
                    Me.txtCnpjCpf.MaxLength = 18 ' Quantidade máxima de caracteres no textbox CNPJ
                    If Len(txtCnpjCpf) = 2 Then txtCnpjCpf = txtCnpjCpf + "."
                    If Len(txtCnpjCpf) = 6 Then txtCnpjCpf = txtCnpjCpf + "."
                    If Len(txtCnpjCpf) = 10 Then txtCnpjCpf = txtCnpjCpf + "/"
                    If Len(txtCnpjCpf) = 15 Then txtCnpjCpf = txtCnpjCpf + "-"
                    mAuxiliar.ValidaçãoCNPJ
                Else
                    Me.txtCnpjCpf.MaxLength = 14  ' Quantidade máxima de caracteres no textbox Cpf
                    If Len(txtCnpjCpf) = 3 Then txtCnpjCpf = txtCnpjCpf + "."
                    If Len(txtCnpjCpf) = 7 Then txtCnpjCpf = txtCnpjCpf + "."
                    If Len(txtCnpjCpf) = 11 Then txtCnpjCpf = txtCnpjCpf + "-"
                    mAuxiliar.ValidaçãoCPF
                End If
        Case Else
            KeyAscii = 0
    End Select
End Sub

========================

Módulo mAuxiliar

========================

Option Explicit


Function ValidaçãoCNPJ(ByVal sCNPJ As String) As Boolean
    
    Dim sVerificador1 As String
    Dim sVerificador2 As String
    Dim l As Long
    Dim lOffset As Long
    Dim lTotal As Long
    Dim lResto As Long
    
    'Limpa barras, traços e pontos do CNPJ, caso haja:
    sCNPJ = Replace(sCNPJ, ".", vbNullString)
    sCNPJ = Replace(sCNPJ, "-", vbNullString)
    sCNPJ = Replace(sCNPJ, "/", vbNullString)
    sCNPJ = Replace(sCNPJ, " ", vbNullString)
    
    'Verifica se o CNPJ possui 11 caracteres
    If Not Len(sCNPJ) = 14 Or Not IsNumeric(sCNPJ) Then Exit Function
    
    'Obtém os dígitos verificadores do CNPJ
    sVerificador1 = Mid(sCNPJ, 13, 2)
    
    sCNPJ = Left(sCNPJ, 12)

    'Calcula os dígitos verificadores de acordo
    'com as regras do Ministério da Fazenda:
    '--- Início ---
    'O código do laço executará duas vezes
    Do Until Len(sCNPJ) = 14
        'Rotina para efetuar o cálculo da soma de produtos
        lOffset = 2
        lTotal = 0
        For l = Len(sCNPJ) To 1 Step -1
            If lOffset > 9 Then lOffset = 2
            lTotal = lTotal + ((Mid(sCNPJ, l, 1)) * lOffset)
            lOffset = lOffset + 1
        Next l
        
        'Cálculo para obter dígito verificador
        l = lTotal Mod 11
        l = 11 - l
        If l = 10 Or l = 11 Then l = 0
        
        'Concatena o dígito l ao CNPJ
        sCNPJ = sCNPJ & CStr(l)
    Loop
    
    'Retorna os dígitos verificadores
    sVerificador2 = Right(sCNPJ, 2)
    
    'Se comparação entre dígitos verificadores for Verdadeiro,
    'então o número do CNPJ é válido:
    ValidaçãoCNPJ = (sVerificador1 = sVerificador2)
End Function

Function ValidaçãoCPF(ByVal sCPF As String) As Boolean
    
    Dim sVerificador1 As String
    Dim sVerificador2 As String
    Dim l As Long
    Dim lOffset As Long
    Dim lTotal As Long
    
    'Limpa traços e pontos do CPF, caso haja:
    sCPF = Replace(sCPF, ".", vbNullString)
    sCPF = Replace(sCPF, "-", vbNullString)
    sCPF = Replace(sCPF, " ", vbNullString)
    
    'Verifica se o CPF possui 11 caracteres
    If Not Len(sCPF) = 11 Or Not IsNumeric(sCPF) Then Exit Function
    
    'Obtém os dígitos verificadores do CPF
    sVerificador1 = Right(sCPF, 2)
    
    sCPF = Left(sCPF, 9)
    
    'Calcula os dígitos verificadores de acordo
    'com as regras do Ministério da Fazenda:
    '--- Início ---
    'O código do laço executará duas vezes
    Do Until Len(sCPF) = 11
        'Rotina para efetuar o cálculo da soma de produtos
        lOffset = 2
        lTotal = 0
        For l = Len(sCPF) To 1 Step -1
            lTotal = lTotal + (Mid(sCPF, l, 1) * lOffset)
            lOffset = lOffset + 1
        Next l
        
        'Cálculo para obter dígito verificador
        l = lTotal Mod 11
        l = 11 - l
        If l = 10 Or l = 11 Then l = 0
        
        'Concatena o dígito l ao CPF
        sCPF = sCPF & CStr(l)
    Loop
    'Os dígitos verifadores são os dois últimos algarismos
    sVerificador2 = Right(sCPF, 2)
    '--- Fim ---
    
    'Se comparação entre dígitos verificadores for Verdadeiro,
    'então o número do CPF é válido:
    ValidaçãoCPF = (sVerificador1 = sVerificador2)
End Function

Está dando o seguinte erro:

Erro de Compilação: O argumento não é opcional

Oq eu faço?

 
Postado : 25/11/2013 8:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

gabriel,
1º) você está formantando para cpf e cnpj no evento txtCnpjCpf_KeyPress.

2º) para evitar o erro, a chamada deve ser da seguinte forma :
Em vez de : mAuxiliar.ValidaçãoCPF o correto seria : mAuxiliar.ValidaçãoCNPJ (txtCnpjCpf) pois o que estamos procurando na Function é o numero do textbox. Na minha opinião esta instrução não deveria estar ai, pois com isto estamos chamando a function para verificar um numero incompleto, pois é verificado cada numero apos digitado e não por inteiro.

3º) Se está querendo fazer a verificação se o valor digitado é válido, tem de fazer a verificação no Evento Exit do Textbox, após ter digitado por completo o valor e não quando digitamos.

[]s

 
Postado : 25/11/2013 8:32 am
(@gabrielcj)
Posts: 19
Eminent Member
Topic starter
 

gabriel,
1º) você está formantando para cpf e cnpj no evento txtCnpjCpf_KeyPress.

2º) para evitar o erro, a chamada deve ser da seguinte forma :
Em vez de : mAuxiliar.ValidaçãoCPF o correto seria : mAuxiliar.ValidaçãoCNPJ (txtCnpjCpf) pois o que estamos procurando na Function é o numero do textbox. Na minha opinião esta instrução não deveria estar ai, pois com isto estamos chamando a function para verificar um numero incompleto, pois é verificado cada numero apos digitado e não por inteiro.

3º) Se está querendo fazer a verificação se o valor digitado é válido, tem de fazer a verificação no Evento Exit do Textbox, após ter digitado por completo o valor e não quando digitamos.

[]s

Fala ae Mauro,

Utilizei o Método que você disse no ínicio mAuxiliar.ValidaçãoCNPJ (txtCnpjCpf), no Evento Exit do Textbox, funcionou legal, vlw.

 
Postado : 25/11/2013 10:02 am
(@gabrielcj)
Posts: 19
Eminent Member
Topic starter
 

Mauro é o Seguinte,

Deu o que você me passou deu certo, só que agora tem um comando que não está funcionando da forma que imaginei, vou mostrar a vc oq eu fiz:

Private Sub txtCnpjCpf_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Me.cboCnpjCpf.Text = "Jurídica" Then
       mAuxiliar.ValidaçãoCNPJ (txtCnpjCpf)
       Else
            mAuxiliar.ValidaçãoCPF (txtCnpjCpf)
            
    End If
End Sub

O que eu quero é o seguinte, caso a validação emita a Mensagem CPF ou CNPJ Inválido, quero q apague a textBox e dê Set Focus nela, como faço essa verificação, neste caso?

 
Postado : 25/11/2013 10:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O que eu quero é o seguinte, caso a validação emita a Mensagem CPF ou CNPJ Inválido, quero q apague a textBox e dê Set Focus nela, como faço essa verificação, neste caso?

Faça o seguinte :
No Modulo mAuxiliar crie a Variavel Publica:
Abaixo da Linha Option Explicit coloque :
Public sCpfCnpj As Boolean

Na Function ValidaçãoCNPJ(ByVal sCNPJ As String) As Boolean acrescente apos a linha que faz a Validação :
.............
................
.......................
ValidaçãoCNPJ = (sVerificador1 = sVerificador2)

'Acrescente esta:
sCpfCnpj = ValidaçãoCNPJ

End Function

Na Function ValidaçãoCPF(ByVal sCPF As String) As Boolean acrescente apos alinha que faz a Validação :
.............
................
.......................
ValidaçãoCPF = (sVerificador1 = sVerificador2)

'Acrescente esta:
sCpfCnpj = ValidaçãoCPF

End Function

Depois no txtCnpjCpf troque a rotina do Evento Exit pela a abaixo:

Private Sub txtCnpjCpf_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    If Me.cboCnpjCpf.Text = "Jurídica" Then
            
            mAuxiliar.ValidaçãoCNPJ (txtCnpjCpf)
            
            If sCpfCnpj = False Then
                txtCnpjCpf.Value = ""
                Cancel = True
                txtCnpjCpf.SetFocus
            End If
       
       Else
            mAuxiliar.ValidaçãoCPF (txtCnpjCpf)
            
            If sCpfCnpj = False Then
                txtCnpjCpf.Value = ""
                Cancel = True
                txtCnpjCpf.SetFocus
            End If
            
    End If
    
End Sub

Faça os testes e veja se é isto.

[]s

 
Postado : 25/11/2013 6:21 pm
(@gabrielcj)
Posts: 19
Eminent Member
Topic starter
 

Vlw Mauro funcionou perfeitamente, muito obrigado pela ajuda!!! :D

Agora estou fazendo a tela de Pesquisa junto com uma ListView, surgiu algumas dúvidas, mas deixo isso para um próximo tópico caso necessário, muito obrigado.

 
Postado : 26/11/2013 12:08 pm