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
Pergunta
gabrieldb
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.
E no form pra verificar meu código tá assim.Desde já agradeço pessoal.
Editado por gabrieldbLink para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
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.