USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Melhorar o controle de CPF e CNPJ
Perk
não registrado
Postada em 28/01/2007 13:49 hs   
No meu sistema eu uso um só campo máscara (Txt_Cli_Codi), para a entrada de CPF, CNPJ ou um código qualquer. Antes dele tem um OptionButton (Opt_Cli_Tipo), onde o usuário informa o que vai digitar e dai eu monto a máscara para a escolha dele.
 
No LostFocus do campo máscara a sub está assim:
 
If Left(Txt_Cli_Codi, 1) = " " Then
    Txt_Cli_Codi.BackColor = &HFFFFFF
    Exit Sub
End If
'verifica CPF
If Opt_Cli_Tipo(1).Value = True Then
    Dim Conta As Integer
    Dim Soma As Integer
    Dim Resto As Integer
    Dim Passo As Integer
    Dim intPos As Integer
    Dim strOrigem As String
    Dim CPF_Antes As String
    CPF_Antes = Txt_Cli_Codi
    For intPos = 1 To Len(Trim(Txt_Cli_Codi))
         If InStr(1, "0123456789P", Mid$(Txt_Cli_Codi, intPos, 1), vbTextCompare) > 0 Then
             strOrigem = strOrigem & Mid$(Txt_Cli_Codi, intPos, 1)
         End If
    Next
    CPF = strOrigem
    For Passo = 11 To 12
        Soma = 0
        For Conta = 1 To Passo - 2
            Soma = Soma + Val(Mid(CPF, Conta, 1)) * (Passo - Conta)
        Next
        Resto = 11 - (Soma - (Int(Soma / 11) * 11))
        If Resto = 10 Or Resto = 11 Then Resto = 0
        If Resto <> Val(Mid(CPF, Passo - 1, 1)) Then
            Txt_Cli_Codi = CPF_Antes
            MsgBox "O CPF informado está incorreto !", vbCritical, "Erro de informação"
            Txt_Cli_Codi.SetFocus
            Exit Sub
        End If
    Next
    Txt_Cli_Codi = CPF_Antes
End If
'verifica CNPJ
If Opt_Cli_Tipo(0).Value = True Then
    Dim Contaj As Integer
    Dim Somaj As Long
    Dim Passoj As Integer
    Dim Digito1 As Integer
    Dim Digito2 As Integer
    Dim Flag As Integer
    Dim CNPJ_Antes As String
    Dim intPosj As Integer
    Dim strOrigemj As String
    CNPJ_Antes = Txt_Cli_Codi
    For intPosj = 1 To Len(Trim(Txt_Cli_Codi))
         If InStr(1, "0123456789P", Mid$(Txt_Cli_Codi, intPosj, 1), vbTextCompare) > 0 Then
             strOrigemj = strOrigemj & Mid$(Txt_Cli_Codi, intPosj, 1)
         End If
    Next
    CNPJ = strOrigemj
    For Passoj = 5 To 6
        Somaj = 0
        Flag = Passoj
        For Contaj = 1 To Passoj + 7
            Somaj = Somaj + (Val(Mid(CNPJ, Contaj, 1)) * Flag)
            Flag = IIf(Flag > 2, Flag - 1, 9)
        Next
        Somaj = Somaj Mod 11
        If Passoj = 5 Then Digito1 = IIf(Somaj > 1, 11 - Somaj, 0)
        If Passoj = 6 Then Digito2 = IIf(Somaj > 1, 11 - Somaj, 0)
    Next
    If (Digito1 <> Val(Mid(CNPJ, 13, 1)) Or Digito2 <> Val(Mid(CNPJ, 14, 1))) Or Not IsNumeric(Right(Txt_Cli_Codi, 1)) Then
        Txt_Cli_Codi = CNPJ_Antes
        MsgBox "O CNPJ informado está incorreto !", vbCritical, "Erro de informação"
        Txt_Cli_Codi.SetFocus
        Exit Sub
    End If
    Txt_Cli_Codi = CNPJ_Antes
End If
Txt_Cli_Codi.BackColor = &HFFFFFF
O que eu preciso para melhorar este código é que caso o CPF ou CNPJ digitado esteja incorreto, na hora em que o sistema avisa deste erro ele também indicasse qual seria o controle correto para que fosse certo.
Ex: digitado: 51.531.051/0001-75
Ele informasse o erro e também que o correto seria controle = 80
 
Estes códigos eu peguei aqui mesmo nas dicas do site para VB. Só que não achei como fazer ele mostrar o controle correto.
 
     
PH1959
Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
Postada em 29/01/2007 10:22 hs            
não entendi direito o q vc quer.
O q eu uso fazer é comparar a qtde de digitos, após isto seleciono o tipo de dados..e ffaço a formatação após a digitação e verificação...
 
 
     
Perk
não registrado
ENUNCIADA !
Postada em 29/01/2007 21:37 hs   
Eu preciso de uma função para dar o dígito certo para CPF ou CNPJ. Esta função que eu tenho aí em cima apenas diz que o CNPJ ou CPF digitado está errado. Não me informa qual o dígito verificador que deveria constar no lugar do que está errado.
 
Por exemplo me dizer o dígito verificador para o CNPJ 51.531.051/0001 e o CPF 126.506.925
   
CSRocha
BRASILIA
DF - BRASIL
Postada em 31/01/2007 07:50 hs            
Perk, isso que vc pretende não é a maneira correta de se "corrigir" o cpf/cnpj digitado, pois o erro pode ser nos 9 ou 12 dígitos antes do controle.

Por ex, num cpf 123456789-77, se a rotina acusar erro, não quer dizer que o 77 é inválido, pode estar antes.

Espero que ajude.
     
Perk
não registrado
Postada em 31/01/2007 09:28 hs   
Pessoal, consegui arrumar o código pegando uma coisa aqui e outra ali e agora ele me mostra qual seria o dígito verificador correto.
Bom, sabem como é, o cliente tem sempre a razão, e como me pediram para o programa fazer isto, tive que fazer...
 
Se quizerem eu coloco aqui como ficou o código.
     
PH1959
Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
Postada em 02/02/2007 14:57 hs            
eu já tinha entendido +- o q vc queria ou seja mudar a função "verificaCPFCGC" para um sub "corrigeCPF-CGC"
     
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página