CGC válido :
no lost focus do seutxt vc chama a função
Vl_Cpf = cgctxt.Text
cpfval = Vl_Cpf
If Fu_consistir_Cpf(Vl_Cpf) = False Then
MsgBox "Número de CPF Inválido"
cgctxt.Text = ""
cgctxt.SetFocus
Else
If Len(Vl_Cpf) = 11 Then
cgctxt.Text = Format(Vl_Cpf, "000.000.000-00")
Else
cgctxt.Text = Format(Vl_Cpf, "000.000.000/000.0-00")
End If
End If
end sub
Public Function Fu_consistir_Cpf(Vl_Cpf As Variant)
Fu_consistir_Cpf = True
Dim VA_Cpf As String
Dim VA_Digito As String
Dim VA_Resto As Integer
Dim VA_Resultado As Integer
Dim VA_SomaDigito10 As Integer
Dim VA_resto1 As Integer
Vl_CgcCpf = Vl_Cpf
Static Numero(15) As Integer
VA_CgcCpf = Format(Vl_CgcCpf, "@@@@@@@@@@@@@@")
VA_Digito = Mid(VA_CgcCpf, 13, 2)
Fu_consistir_Cpf = False
Numero(1) = Val(Mid(VA_CgcCpf, 1, 1))
Numero(2) = Val(Mid(VA_CgcCpf, 2, 1))
Numero(3) = Val(Mid(VA_CgcCpf, 3, 1))
Numero(4) = Val(Mid(VA_CgcCpf, 4, 1))
Numero(5) = Val(Mid(VA_CgcCpf, 5, 1))
Numero(6) = Val(Mid(VA_CgcCpf, 6, 1))
Numero(7) = Val(Mid(VA_CgcCpf, 7, 1))
Numero(8) = Val(Mid(VA_CgcCpf, 8, 1))
Numero(9) = Val(Mid(VA_CgcCpf, 9, 1))
Numero(10) = Val(Mid(VA_CgcCpf, 10, 1))
Numero(11) = Val(Mid(VA_CgcCpf, 11, 1))
Numero(12) = Val(Mid(VA_CgcCpf, 12, 1))
Numero(13) = Val(Mid(VA_CgcCpf, 13, 1))
Numero(14) = Val(Mid(VA_CgcCpf, 14, 1))
If Len(Trim(Vl_CgcCpf)) > 11 Then ' Cgc
VA_Resultado = Numero(1) * 2
If VA_Resultado > 9 Then
VA_SomaDigito10 = VA_Resultado + 1
Else
VA_SomaDigito10 = VA_Resultado
End If
VA_Resultado = Numero(3) * 2
If VA_Resultado > 9 Then
VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1
Else
VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado
End If
VA_Resultado = Numero(5) * 2
If VA_Resultado > 9 Then
VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1
Else
VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado
End If
VA_Resultado = Numero(7) * 2
If VA_Resultado > 9 Then
VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado + 1
Else
VA_SomaDigito10 = VA_SomaDigito10 + VA_Resultado
End If
VA_SomaDigito10 = VA_SomaDigito10 + Numero(2) + Numero(4) + Numero(6)
If Mid(str(VA_SomaDigito10), Len(str(VA_SomaDigito10)), 1) = "0" Then
VA_Resto = 0
Else
VA_Resto = 10 - Val(Mid(str(VA_SomaDigito10), Len(str(VA_SomaDigito10)), 1))
End If
If VA_Resto <> Numero(8) Then
Exit Function
End If
VA_Resultado = (Numero(1) * 5) + (Numero(2) * 4) _
+ (Numero(3) * 3) + (Numero(4) * 2) _
+ (Numero(5) * 9) + (Numero(6) * 8) + _
(Numero(7) * 7) + (Numero(8) * 6) + _
(Numero(9) * 5) + (Numero(10) * 4) + _
(Numero(11) * 3) + (Numero(12) * 2)
' Atribui para resto o resto da divisão
' de VA_resultado dividido por 11
VA_Resto = VA_Resultado Mod 11
If VA_Resto < 2 Then
VA_resto1 = 0
Else
VA_resto1 = 11 - VA_Resto
End If
If VA_resto1 <> Numero(13) Then
Exit Function
End If
VA_Resultado = (Numero(1) * 6) + _
(Numero(2) * 5) + (Numero(3) * 4) + _
(Numero(4) * 3) + (Numero(5) * 2) + _
(Numero(6) * 9) + (Numero(7) * 8) + _
(Numero(8) * 7) + (Numero(9) * 6) + _
(Numero(10) * 5) + (Numero(11) * 4) + _
(Numero(12) * 3) + (Numero(13) * 2)
' Atribui para resto o resto da divisão
' de VA_resultado dividido por 11
VA_Resto = VA_Resultado Mod 11
If VA_Resto < 2 Then
VA_resto1 = 0
Else
VA_resto1 = 11 - VA_Resto
End If
If VA_resto1 <> Numero(14) Then
Exit Function
End If
Else ' Cpf
VA_Resultado = (Numero(4) * 1) + (Numero(5) * 2) + (Numero(6) * 3) + (Numero(7) * 4) + (Numero(8) * 5) + (Numero(9) * 6) + (Numero(10) * 7) + (Numero(11) * 8) + (Numero(12) * 9)
VA_Resto = VA_Resultado Mod 11
If VA_Resto > 9 Then
VA_resto1 = VA_Resto - 10
Else
VA_resto1 = VA_Resto
End If
If VA_resto1 <> Numero(13) Then
Exit Function
End If
VA_Resultado = (Numero(5) * 1) + (Numero(6) * 2) + (Numero(7) * 3) + (Numero(8) * 4) + (Numero(9) * 5) + (Numero(10) * 6) + (Numero(11) * 7) + (Numero(12) * 8) + (VA_Resto * 9)
VA_Resto = VA_Resultado Mod 11
If VA_Resto > 9 Then
VA_resto1 = VA_Resto - 10
Else
VA_resto1 = VA_Resto
End If
If VA_resto1 <> Numero(14) Then
Exit Function
End If
End If
Fu_consistir_Cpf = True
End Function