Public Function ValidaCPF(CPF As String) As String
'Função para cálculo do dígito verificador do CPF
'Iniciamos a função com a declaração das variáveis que serão utilizadas.
' As variáveis d1 até d11, conterão os dígitos individuais
' do CPF. Por exemplo, ao digitar o CPF: 123.456.789-11, essas
' variáveis conterão os seguintes valores:
' d1=1 d2=2 d3=3 d4=4 d5=5 d6=5 d7=7 d8=8 d9=9 d10=1 d11=1
Dim d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11 As Integer
' Demais variáveis que serão utilizadas para o cálculo do DV.
Dim Soma1, Soma2, Resto As Integer
Dim Resto1, Resto2 As Integer
Dim DV1, DV2 As Integer
' Em primeiro lugar testo se a célula com o CPF contém um valor
' válido, isto é, um valor Não Nulo.
If Not (IsNull(CPF)) Then
'*************************************************************************
' Os comandos a seguir desmembram o CPF um a um , atribuindo os valores *
' de d1 ... d11 , usando as funções Mid$ e Val *
' Como o CPF está no formato de Texto, vamos extrair os dígitos do CPF *
' um a um, converter o respectivo valor de texto para número e atribuir *
' esse valor para as variáveis d1 até d11. *
'*************************************************************************
d1 = Val(Mid$(CPF, 1, 1))
d2 = Val(Mid$(CPF, 2, 1))
d3 = Val(Mid$(CPF, 3, 1))
d4 = Val(Mid$(CPF, 5, 1))
d5 = Val(Mid$(CPF, 6, 1))
d6 = Val(Mid$(CPF, 7, 1))
d7 = Val(Mid$(CPF, 9, 1))
d8 = Val(Mid$(CPF, 10, 1))
d9 = Val(Mid$(CPF, 11, 1))
d10 = Val(Mid$(CPF, 13, 1))
d11 = Val(Mid$(CPF, 14, 1))
'*************************************************************************
' A partir de agora passo a utilizar os valores anteriores para cálculo *
' do dígito verificador do CPF *
'*************************************************************************
' Cálculo do primeiro DV
Soma1 =((d1*10)+(d2*9)+(d3*8)+(d4*7)+(d5*6)+(d6*5)+(d7*4)+(d8*3)+(d9*2))
Resto1 = (Soma1 Mod 11)
If (Resto1 <= 1) Then
DV1 = 0
Else
DV1 = 11 - Resto1
End If
' Agora inicio o cálculo do segundo DV, já incorporando
' o segundo DV como parte do CPF, para o cálculo.
Soma2=(d1*11)+(d2*10)+(d3*9)+(d4*8)+(d5*7)+(d6*6)+(d7*5)+(d8*4)+(d9*3)+(DV1* 2)
Resto2 = (Soma2 Mod 11)
If (Resto2 <= 1) Then
DV2 = 0
Else
DV2 = 11 - Resto2
End If
' Agora faço o teste para saber se os DVs calculados (DV1 e DV2)
' conferem com os DVs do CPF - d10 e d11
If ((DV1 <> d10) Or (DV2 <> d11)) Then
' Atribuo a palavra "Inválido" para uma variável com o mesmo
' nome da função - ValidaCPF.
' Essa é a maneira de fazer com que a função retorne um valor,
' ou seja, atribuindo o valor a ser retornado, à uma variável
' com o mesmo nome da função.
ValidaCPF = "Inválido"
Else
' Atribuo a palavra "Válido" para uma variável com o mesmo
' nome da função - ValidaCPF.
' Essa é a maneira de fazer com que a função retorne um valor,
' ou seja, atribuindo o valor a ser retornado, à uma variável
' com o mesmo nome da função.
ValidaCPF = "Válido"
End If
End If
End Function
|