Uma das mais famosas validações que precisamos fazer em nossos sistemas… validar o CPF.

 

Function VerificaCPF%(CPF As String)

   CPF = Trim(CPF)

   Dim cont, i, J

   i = Left(CPF, 1)

   For J = 1 To 11

       If Mid$(CPF, J, 1) = i Then

          cont = cont + 1

       End If

   Next J

    If Val(CPF) = 0 Then

        VerificaCPF% = True

        Exit Function

   End If

   If Len(CPF) <> 11 Or cont = 11 Then

      MsgBox “CPF Informado Inválido. Verifique !”

      VerificaCPF% = False

      Exit Function

   End If

   Dim Total&, Indice%, Resto%, DigitoVerificador%

   Dim Contador As Variant

   VerificaCPF% = True

   ‘PRIMEIRA PARTE. CHECA O PRIMEIRO DIGITO VERIFICADOR

   Indice% = 2

   For Contador = -9 To -1

      Total& = Total& + (CInt(CInt(Mid$(CPF, Abs(Contador), 1)) * Indice%))

      Indice% = Indice% + 1

   Next Contador

   Resto% = CInt(Total& – (Int(Total& / 11) * 11))

   If Resto% = 0 Or Resto% = 1 Then

      DigitoVerificador% = 0

   Else

      DigitoVerificador% = 11 – CInt(Total& – (Int(Total& / 11) * 11))

   End If

   If CInt(Mid$(CPF, 10, 1)) <> DigitoVerificador% Then

      MsgBox “CPF Informado Inválido. Verifique !”

      VerificaCPF% = False

      Exit Function

   End If

   ‘SEGUNDA PARTE. CHECA O ULTIMO DIGITO VERIFICADOR

   Indice% = 2

   Total& = 0

   Resto% = 0

   DigitoVerificador% = 0

   For Contador = -10 To -1

      Total& = Total& + (CInt(CInt(Mid$(CPF, Abs(Contador), 1)) * Indice%))

      Indice% = Indice% + 1

   Next Contador

   Resto% = CInt(Total& – (Int(Total& / 11) * 11))

   If Resto% = 0 Or Resto% = 1 Then

      DigitoVerificador% = 0

   Else

      DigitoVerificador% = 11 – CInt(Total& – (Int(Total& / 11) * 11))

   End If

   If CInt(Mid$(CPF, 11, 1)) <> DigitoVerificador% Then

      MsgBox “CPF Informado Inválido. Verifique !”

      VerificaCPF% = False

      Exit Function

   End If

 End Function