Validar CPF, CNPJ e TÃtulo de Eleitor (Parte II)
Continuando o artigo anterior sobre Validação de CPF, CNPJ e TÃtulo de Eleitor, abordarei hoje como verificar a validade de um número de um TÃtulo de eleitor. Para quem não leu a primeira parte do artigo, leia aqui.
O objetivo da função que desenvolveremos é de verificar se um número de tÃtulo eleitoral digitado é válido. Elaborei esta fórmula para o uso na planilha do excel de forma que execute a validação desses números. A forma de calcular já é de saber público e facilmente encontrada na internet. O que fiz foi desenvolver uma função de cálculo e análise desse algorÃtimo através do VBA do Excel.
Então… Mãos à obra!!!
1 – Validação de número de TÃtulo Eleitoral.
Primeiramente vamos entender como se obtém o algorÃtimo do DV(DÃgito Verificador) de um TÃtulo Eleitoral.
O algorÃtimo para calcular um TÃtulo Eleitoral válido é feito de maneira similar ao do CPF e CNPJ. Primeiro conseguimos o valor para o primeiro digito verificador. Ele é obtido através do resto da divisão por 11 da soma da multiplicação de cada um dos 8 primeiros algarismos, respectivamente, por 2, 3, 4, 5, 6, 7, 8 e 9. Vejamos a ilustração.
| Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| TÃtulo Eleitoral | 1 | 0 | 6 | 6 | 4 | 4 | 4 | 4 | 0 | 3 | 0 | 2 |
| Multiplicar por | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||||
| Resultado a somar | 2 + | 0 + | 24 + | 30 + | 24 + | 28 + | 32 + | 36 + | =176 | |||
Obtendo o resto da divisão por 11 ==> 176 / 11 = 16 resto 0.
Com isso, conseguimos o primeiro dÃgito verificador (0). Paraa obtenção do segundo dÃgito verificador, tomaremos os dois dÃgitos que correspondem a UF do tÃtulo. Eles ficam nas posições 9 e 10. Incluiremos o primeiro DV obtido e multiplicaremos por 7, 8 e9, respectivamente. Somaremos o produto e dividiremos por 11, aproveitando apenas o resto da divisão. Veja a tabela.
| Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| TÃtulo Eleitoral | 1 | 0 | 6 | 6 | 4 | 4 | 4 | 4 | 0 | 3 | 0 | 2 |
| Multiplicar por | 7 | 8 | 9 | |||||||||
| Resultado a somar | 0 + | 24 | 0 | =24 |
Obtendo o resto da divisão por 11 ==> 24 / 11 = 2 resto 2.
Agora, conseguimos o segundo dÃgito verificador (2). Portanto, o DV para este TÃtulo Eleitoral é 02.
Quando falei em algarismos que correspondem a UF, me referia a tabela de UFs que são válidas para as posições 9 e 10 do número do tÃtulo de eleitor. Veja a tabela.
| UF | Código | UF | Código |
| SP | 01 | PI | 15 |
| MG | 02 | RN | 16 |
| RJ | 03 | AL | 17 |
| RS | 04 | MT | 18 |
| BA | 05 | MS | 19 |
| PR | 06 | DF | 20 |
| CE | 07 | SE | 21 |
| PE | 08 | AM | 22 |
| SC | 09 | RS | 23 |
| GO | 10 | AC | 24 |
| MA | 11 | AP | 25 |
| PB | 12 | RR | 26 |
| PA | 13 | TO | 27 |
| ES | 14 | ZZ-Exterior | 28 |
Vamos transferir toda essa matemática agora para a função VBA. No código, desmembraremos o número do tÃtulo em algarismos, executaremos as operações matemáticas e, por fim, efetuaremos a comparação dos DVs obtidos com o algorÃtimo com os DVs fornecidos no TÃtulo Eleitoral analizado.
Vá ao ambiente de desenvolvimento do VBA (Alt+F11), insira um novo módulo e digite o código abaixo.
Public Function VerificarTituloEleitor(sTitulo As String) As String Dim d1 As Integer Dim d2 As Integer Dim d3 As Integer Dim d4 As Integer Dim d5 As Integer Dim d6 As Integer Dim d7 As Integer Dim d8 As Integer Dim d9 As Integer Dim d10 As Integer Dim d11 As Integer Dim d12 As Integer Dim DV1 As Integer Dim DV2 As Integer Dim UltDig As Integer 'Completa com zeros à esquerda caso não esteja com os 11 digitos If Len(sTitulo) < 12 Then sTitulo = String(12 - Len(sTitulo), "0") & sTitulo End If 'Pega a posição do último dÃgito UltDig = Len(sTitulo) 'Sai da função caso a célula esteja vazia If sTitulo = "000000000000" Then VerificarTituloEleitor = "" Exit Function End If 'Pega cada dÃgito do CPF informado e 'coloca nas variáveis especÃficas d1 = CInt(Mid(sTitulo, UltDig - 11, 1)) d2 = CInt(Mid(sTitulo, UltDig - 10, 1)) d3 = CInt(Mid(sTitulo, UltDig - 9, 1)) d4 = CInt(Mid(sTitulo, UltDig - 8, 1)) d5 = CInt(Mid(sTitulo, UltDig - 7, 1)) d6 = CInt(Mid(sTitulo, UltDig - 6, 1)) d7 = CInt(Mid(sTitulo, UltDig - 5, 1)) d8 = CInt(Mid(sTitulo, UltDig - 4, 1)) d9 = CInt(Mid(sTitulo, UltDig - 3, 1)) d10 = CInt(Mid(sTitulo, UltDig - 2, 1)) d11 = CInt(Mid(sTitulo, UltDig - 1, 1)) '<----- Aqui são os DVs informados d12 = CInt(Mid(sTitulo, UltDig, 1)) '<----- no TÃtlo Eleitoral analizado '----------- Aqui é executado o calculo para obter os digitos verificadores corretos DV1 = (d1 * 2) + (d2 * 3) + (d3 * 4) + (d4 * 5) + (d5 * 6) + (d6 * 7) + (d7 * 8) + (d8 * 9) DV1 = DV1 Mod 11 'Obtem o resto 'se o resto for igual a 10 altera pra 0 If DV1 = 10 Then DV1 = 0 End If DV2 = (d9 * 7) + (d10 * 8) + (DV1 * 9) DV2 = DV2 Mod 11 'Obtem o resto 'se o resto for igual a 10 altera pra 0 If DV2 = 10 Then DV2 = 0 End If '---------- Fazendo a comparação dos dvs informados ------- If d11 = DV1 And d12 = DV2 Then If CInt(d9 & d10) > 0 And CInt(d9 & d10) < 29 Then VerificarTituloEleitor = "TÃtulo Eleitoral Válido" Else VerificarTituloEleitor = "TÃtulo Eleitoral Inválido" End If Else VerificarTituloEleitor = "TÃtulo Eleitoral Inválido" End If End Function |
Retorne à planilha e para chamar a função na célula, digite:
=VerificarTituloEleitor(A1)
Supondo que na célula A1 contenha um número de TÃtulo Eleitoral.
Bom! Finalizamos mais um artigo. Espero ajudar bastante seus trabalhos. Gostaria de lembrar a você que eu desenvolvo funções personalizadas por encomenda. Caso necessite de um projeto bem elaborado e funcional, solicitem um orçamento . Um abraço.
Termos aprendidos neste artigo:
| Len | Retorna um Long que contém o número de caracteres existentes em uma seqüência de caracteres ou o número de bytes necessários para armazenar uma variável.
Sintaxe Len(string | varname) A sintaxe da função Len tem as seguintes partes:
|
||||||||
| String | Retorna uma Variant (String) que contém uma seqüência de caracteres repetida com o comprimento especificado.
Sintaxe String(number, character) A sintaxe da função String tem os seguintes argumentos nomeados:
|
||||||||
| CInt | Converte uma expressão no tipo de dados Integer.
Sintaxe CInt(expression) |
||||||||
| Mid | Retorna uma Variant (String) que contém um número especificado de caracteres de uma seqüência de caracteres.
Sintaxe Mid(string, start[, length]) A sintaxe da função Mid tem os seguintes argumentos nomeados:
|
||||||||
| Mod | Operador usado para dividir dois números e retornar somente o resto. Sintaxe result = number1 Mod number2 A sintaxe do operador Mod possui as seguintes partes:
Comentários O operador de módulo, ou resto, divide number1 por number2 (arredondando números de ponto flutuante para inteiros) e retorna somente o resto como result. Por exemplo, na expressão a seguir, A (result) é igual a 5. A = 19 Mod 6.7 |




3 Comentários
[...] dos 8 primeiros algarismos, respectivamente, por 2, 3, 4, 5, 6, 7, 8 e 9. … fique por dentro clique aqui. Fonte: [...]
Comentário feito em janeiro 12th, 2009 às 22:36
Ref:Validação de número de TÃtulo Eleitoral.
como faço pra encontrar os digitos verificadores do nº do titulo eleitor 1265934718-72.tentei pelo seu metodo mas nao consigo encontrar os digito 7 e 2.
se puder me ajudar , agradeço.
Reply
exceldoseujeito Reply:
agosto 26th, 2009 at 19:51
Amigo,
Joguei este número de tÃtulo aqui e deu certo.
Detalhe: Você está digitando com o traço? Se tiver, escreva apenas os números, ok?
Abraço!
Reply
Comentário feito em agosto 26th, 2009 às 17:14
Deixar um comentário