Last active
April 27, 2018 13:34
-
-
Save Maux/d11cd8baff3755ed00ef72fe6a1b4b6c to your computer and use it in GitHub Desktop.
Validação de CPF em VBA - CPF Validation in VBA
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Option Explicit | |
Public Function fxValidarCPF(ByVal CPF As String) As Boolean | |
'Declaração de variáveis utilizadas na função de validação | |
Dim arrDigits(1 To 11) As Byte, digtVer1 As Byte, digtVer2 As Byte, i As Byte | |
Dim sum1 As Integer, sum2 As Integer | |
Dim tmp As String | |
'Retira todos caracteres que não são números do valor passado | |
For i = 1 To Len(CPF) | |
If Mid(CPF, i, 1) Like "[0-9]" Then tmp = tmp & Mid(CPF, i, 1) | |
Next i | |
'Se houver + de 11 números, termina a função com valor FALSE | |
If Len(CPF) > 11 Then Exit Function | |
'Se houver - de 11 números, inser 0 'zeros' a frente do valor até | |
'completar 11 números | |
For i = 1 To (11 - Len(CPF)) | |
CPF = "0" & CPF | |
Next i | |
'Verifica se o valor passado não é um valor repetido | |
'como 00000000000, 11111111111, 22222222222, etc... | |
'Estes valores retornam VERDADEIRO na validação | |
'mas não existem para a Receita Federal | |
For i = 0 To 9 | |
If CPF = Application.WorksheetFunction.Rept(i, 11) Then Exit Function | |
Next i | |
'Armazena cada numero passado para uma matriz (Array) | |
For i = LBound(arrDigits) To UBound(arrDigits) | |
arrDigits(i) = CByte(Mid(CPF, i, 1)) | |
Next i | |
'Armazena a soma dos números nas variáveis sum1 e sum2 | |
For i = 1 To 10 | |
If i < 10 Then sum1 = sum1 + (arrDigits(i) * i) | |
If i > 1 Then sum2 = sum2 + (arrDigits(i) * (i - 1)) | |
Next i | |
'Verifica o MOD dos valores de sum1 e sum2 e adiciona | |
'o resultado nas variáveis digtVer1 e digtVer2 | |
If sum1 Mod 11 = 10 Then digtVer1 = 0 Else digtVer1 = sum1 Mod 11 | |
If sum2 Mod 11 = 10 Then digtVer2 = 0 Else digtVer2 = sum2 Mod 11 | |
'Verifica se o valor de digtVer1 é igual ao 10º número do CPF | |
'e se o valor de digtVer2 é igual ao 11º número do CPF | |
'Caso positivo, a função retorna que o número de CPF passado é VERDADEIRO | |
'Caso contrário, a função retorna FALSO | |
If digtVer1 = arrDigits(10) And digtVer2 = arrDigits(11) Then fxValidarCPF = True | |
End Function |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment