Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Validação de CPF/CNPJ


gabrieldb

Pergunta

Boa tarde pessoal eu aqui mais uma vez, meu problema é o seguinte peguei na internet uma função que valida CPF/CNPJ porém no código ela estava com maskedbox eu mudei para text porque não gosto da masked, mais agora dá sempre como CPF/CNPJ inválido alguém pode dar uma olhada no meu código e ver o que está errado ?

Coloquei em um módulo a função.

Function calculacpf(CPF As String) As Boolean
On Error GoTo Err_CPF
Dim I As Integer 'utilizada nos FOR... NEXT
Dim strcampo As String 'armazena do CPF que será utilizada para o cálculo
Dim strCaracter As String 'armazena os digitos do CPF da direita para a esquerda
Dim intNumero As Integer 'armazena o digito separado para cálculo (uma a um)
Dim intMais As Integer 'armazena o digito específico multiplicado pela sua base
Dim lngSoma As Long 'armazena a soma dos digitos multiplicados pela sua base(intmais)
Dim dblDivisao As Double 'armazena a divisão dos digitos*base por 11
Dim lngInteiro As Long 'armazena inteiro da divisão
Dim intResto As Integer 'armazena o resto
Dim intDig1 As Integer 'armazena o 1º digito verificador
Dim intDig2 As Integer 'armazena o 2º digito verificador
Dim strConf As String 'armazena o digito verificador

lngSoma = 0
intNumero = 0
intMais = 0
strcampo = Left(CPF, 9)

'Inicia cálculos do 1º dígito
For I = 2 To 10
    strCaracter = Right(strcampo, I - 1)
    intNumero = Left(strCaracter, 1)
    intMais = intNumero * I
    lngSoma = lngSoma + intMais
Next I
dblDivisao = lngSoma / 11

lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
    intDig1 = 0
Else
    intDig1 = 11 - intResto
End If

strcampo = strcampo & intDig1 'concatena o CPF com o primeiro digito verificador
lngSoma = 0
intNumero = 0
intMais = 0
'Inicia cálculos do 2º dígito
For I = 2 To 11
    strCaracter = Right(strcampo, I - 1)
    intNumero = Left(strCaracter, 1)
    intMais = intNumero * I
    lngSoma = lngSoma + intMais
Next I
dblDivisao = lngSoma / 11
lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
    intDig2 = 0
Else
    intDig2 = 11 - intResto
End If
strConf = intDig1 & intDig2
'Caso o CPF esteja errado dispara a mensagem
If strConf <> Right(CPF, 2) Then
    calculacpf = False
Else
    calculacpf = True
End If
Exit Function

Exit_CPF:
    Exit Function
Err_CPF:
    MsgBox Error$
    Resume Exit_CPF
End Function


Public Function CalculaCGC(Numero As String) As String

Dim I As Integer
Dim prod As Integer
Dim mult As Integer
Dim digito As Integer

If Not IsNumeric(Numero) Then
   CalculaCGC = ""
   Exit Function
End If

mult = 2
For I = Len(Numero) To 1 Step -1
  prod = prod + Val(Mid(Numero, I, 1)) * mult
  mult = IIf(mult = 9, 2, mult + 1)
Next

digito = 11 - Int(prod Mod 11)
digito = IIf(digito = 10 Or digito = 11, 0, digito)

CalculaCGC = Trim(Str(digito))

End Function
Public Function ValidaCGC(CGC As String) As Boolean
If CalculaCGC(Left(CGC, 12)) <> Mid(CGC, 13, 1) Then
   ValidaCGC = False
   Exit Function
End If

If CalculaCGC(Left(CGC, 13)) <> Mid(CGC, 14, 1) Then
   ValidaCGC = False
   Exit Function
End If

ValidaCGC = True

End Function
E no form pra verificar meu código tá assim.
Private Sub Text1_LostFocus()
    If Len(Text1.Text) > 0 Then
      Select Case Len(Text1.Text)
       Case Is = 11
         Text1.Text = Format$(Text1.Text, "@@@.@@@.@@@-@@")
         If Not calculacpf(Text1.Text) Then
            MsgBox "CPF com DV incorreto !!!"
            Text1 = ""
            Text1.Text = ""
            Text1.SetFocus
         End If
       Case Is = 14
         Text1.Text = Format$(Text1.Text, "@@.@@@.@@@/@@@@-@@")
         If Not ValidaCGC(Text1.Text) Then
            MsgBox "CGC com DV incorreto !!! "
            Text1 = ""
            Text1.Text = ""
            Text1.SetFocus
         End If
      End Select
    End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
  'Se teclar enter envia um TAB
  If KeyAscii = 13 Then
     SendKeys "{TAB}"
     KeyAscii = 0
  End If
End Sub

Desde já agradeço pessoal.

Editado por gabrieldb
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
gabriel, você mudou alguma coisa dentro da funcao, ou foi so no lostfocus??

normalmente nas funcoes de validacao q você encontra por ai, tem q passar o parametro sem barra e sem pontos (então você tera q usar um replace para tira-los antes de chamar a funcao).

eu mudei só no lostfocus onde tava maskedbox eu substitui por textbox, como eu faço esse replace ?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...