    Rotinas para Validar CPF e CGC

    Inicie o Visual Basic , Crie um form como abaixo e a seguir insira o código para cada

    evento do controle MaskedBox. A seguir insira um módulo com as funções que irão checar o

    CGC e o CPF e fique a vontade para otimizá-las. Acho que o resto é intuitivo.

    Rotinas do formulário Form1

    Private Sub Maskcpfcgc_LostFocus()
        If Len(Maskcpfcgc.Text) > 0 Then
          Select Case Len(Maskcpfcgc.Text)
           Case Is = 11
             Maskcpfcgc.Mask = "###.###.###-##"
             If Not calculacpf(Maskcpfcgc.Text) Then
                MsgBox "CPF com DV incorreto !!!"
                Maskcpfcgc = ""
                Maskcpfcgc.Mask = "##############"
                Maskcpfcgc.SetFocus
             End If
           Case Is = 14
             Maskcpfcgc.Mask = "##.###.###/####-##"
             If Not ValidaCGC(Maskcpfcgc.Text) Then
                MsgBox "CGC com DV incorreto !!! "
                Maskcpfcgc = ""
                Maskcpfcgc.Mask = "##############"
                Maskcpfcgc.SetFocus
             End If
          End Select
        End If
    End Sub

    Private Sub Maskcpfcgc_GotFocus()
      Maskcpfcgc.Mask = "##############"
    End Sub

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

    Private Sub Command1_Click()
       End
    End Sub

    Funções para Validar CPF e CGC

    1- Validar CGC

    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

    2- Validar CPF

    Function calculacpf(CPF As String) As Boolean
    'Esta rotina foi adaptada da revista Fórum Access
    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

    Bye, bye...

Retorna