Veja uma função no Excel que verifica CPFs

Muitas vezes, precisamos verificar se um número de CPF fornecido é realmente válido. Os números de CPF não são formados ao acaso. Existe um cálculo matemático utilizado para determinar os dois últimos dígitos do CPF a partir dos 9 primeiros. Esse método ajuda a evitar que alguém simplesmente invente um número de CPF falso. A probabilidade de acerto nesses casos é de um para cem, já que existem cem possibilidades (de 00 a 99) para o valor dos dois últimos dígitos.

O cálculo é baseado na soma dos dígitos do CPF (previamente multiplicados por pesos, diferentes para cada dígito) e no resto da divisão por 11 dessas somas. No exemplo a seguir, criamos uma função no Excel, através de VBA, que pode ser utilizada como função de planilha.

Option Explicit

Public Function TestaCPF(CPF As String) As String

Dim intD1 As Integer 'armazena 1º dígito
Dim intD2 As Integer 'armazena 2º dígito
Dim intD3 As Integer 'armazena 3º dígito
Dim intD4 As Integer 'armazena 4º dígito
Dim intD5 As Integer 'armazena 5º dígito
Dim intD6 As Integer 'armazena 6º dígito
Dim intD7 As Integer 'armazena 7º dígito
Dim intD8 As Integer 'armazena 8º dígito
Dim intD9 As Integer 'armazena 9º dígito
Dim intD10 As Integer 'armazena 10º dígito
Dim intD11 As Integer 'armazena 11º dígito
Dim intSoma1 As Integer 'armazena valor utilizado durante o cálculo dos dígitos verificadores
Dim intSoma2 As Integer 'armazena valor utilizado durante o cálculo dos dígitos verificadores
Dim intResto1 As Integer 'armazena valor utilizado durante o cálculo dos dígitos verificadores
Dim intResto2 As Integer 'armazena valor utilizado durante o cálculo dos dígitos verificadores
Dim intDigVer1 As Integer 'armazena o 1º dígito verificador calculado pela função
Dim intDigVer2 As Integer 'armazena o 2º dígito verificador calculado pela função

If Not IsNull(CPF) Then

intD1 = Mid(CPF, 1, 1) '1º dígito = 1º caractere à esquerda do cpf
intD2 = Mid(CPF, 2, 1) '2º dígito = 2º caractere à esquerda do cpf
intD3 = Mid(CPF, 3, 1) '3º dígito = 3º caractere à esquerda do cpf
intD4 = Mid(CPF, 5, 1) '4º dígito = 5º caractere à esquerda do cpf
intD5 = Mid(CPF, 6, 1) '5º dígito = 6º caractere à esquerda do cpf
intD6 = Mid(CPF, 7, 1) '6º dígito = 7º caractere à esquerda do cpf
intD7 = Mid(CPF, 9, 1) '7º dígito = 9º caractere à esquerda do cpf
intD8 = Mid(CPF, 10, 1) '8º dígito = 10º caractere à esquerda do cpf
intD9 = Mid(CPF, 11, 1) '9º dígito = 11º caractere à esquerda do cpf
intD10 = Mid(CPF, 13, 1) '10º dígito = 13º caractere à esquerda do cpf
intD11 = Mid(CPF, 14, 1) '11º dígito = 14º caractere à esquerda do cpf

'intSoma1 armazena resultado de cálculo com os 9 primeiros dígitos do CPF
intSoma1 = intD1 * 10 + intD2 * 9 + intD3 * 8 + intD4 * 7 + intD5 * 6 + intD6 * 5 + intD7 * 4 + intD8 * 3 + intD9 * 2

'intResto1 armazena valor do resto da divisão de intSoma1 por 11
intResto1 = intSoma1 Mod 11

'se o resto da divisão for menor ou igual a um, o primeiro dígito verificador é igual a zero
If intResto1 <= 1 Then
intDigVer1 = 0
'caso contrário, o dígito verificador é igual a 11 menos o valor de intResto1
Else
intDigVer1 = 11 - intResto1
End If

'intSoma1 armazena resultado de cálculo com os 9 primeiros dígitos do CPF e o primeiro dígito verificador
intSoma2 = intD1 * 11 + intD2 * 10 + intD3 * 9 + intD4 * 8 + intD5 * 7 + intD6 * 6 + intD7 * 5 + intD8 * 4 + intD9 * 3 + intDigVer1 * 2

'intResto1 armazena valor do resto da divisão de intSoma1 por 11
intResto2 = intSoma2 Mod 11

'se o resto da divisão for menor ou igual a um, o segundo dígito verificador é igual a zero
If intResto2 <= 1 Then
intDigVer2 = 0
'caso contrário, o dígito verificador é igual a 11 menos o valor de intResto2
Else
intDigVer2 = 11 - intResto2
End If

'se o 1º dígito verificador calculado for diferente do 10º dígito do CPF testado
'OU se o 2º dígito verificador calculado for diferente do 11º dígito do CPF testado
'a função retorna "Inválido"
If intDigVer1 <> intD10 Or intDigVer2 <> intD11 Then
TestaCPF = "Inválido"
'a função retorna "Válido"
Else
TestaCPF = "Válido"
End If

End If

End Function

Julio A. Macedo Jr. -- 14/05/2009


Al. Santos, 1293 - 9° andar  |  Jd. Paulista - São Paulo-SP  |  11 3284-7388


Copyright © 2017 by CompuClass Informática


-