[resolvido] Validador de Titulo de Eleitor

Moderador: Avelino Sampaio

Robson Santos
Mensagens: 3
Registrado em: 22 Jun 2016, 19:27

[resolvido] Validador de Titulo de Eleitor

Mensagempor Robson Santos » 22 Jun 2016, 19:37

Como criar um validador para Titulo de Eleitor para uso em BD Access?

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 1882
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Validador de Titulo de Eleitor

Mensagempor Avelino Sampaio » 22 Jun 2016, 20:11

Robson,

fiz uma pesquisa rápida aqui sobre a regra de validação e cai neste site de Excel. Testei o código oferecido e parece funcionar bem. Terá que testar bastante para saber se está tudo ok

Segue código que testei no Access:

Código:
Public Function VerificarTituloEleitor(sTitulo As String) As String

Dim d1%, d2%, d3%, d4%, d5%, d6%, d7%, d8%, d9%, d10%, d11%
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 Título 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

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

'---------- 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


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Robson Santos
Mensagens: 3
Registrado em: 22 Jun 2016, 19:27

Re: Validador de Titulo de Eleitor

Mensagempor Robson Santos » 22 Jun 2016, 20:52

OK! Vou testar e retorno sobre o resultado.

Apenas uma questão: uso com a mesma rotina do validador de CPF/CNPJ ?

Avatar do usuário
Avelino Sampaio
Mensagens: 1882
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Validador de Titulo de Eleitor

Mensagempor Avelino Sampaio » 22 Jun 2016, 21:09

Robson,

faça as modificações para as partes vermelhas.

Código:
Public Function VerificarTituloEleitor(sTitulo As String) As Boolean

Dim d1%, d2%, d3%, d4%, d5%, d6%, d7%, d8%, d9%, d10%, d11%
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 Título 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

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

'---------- 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 = true
End If
End If

End Function


No evento Antes de atualizar do campo título de eleitor, coloque:

Código:
Private Sub TituloEleitor_BeforeUpdate(Cancel As Integer)
If VerificarTituloEleitor(Me!TituloEleitor) = False Then
MsgBox "Tpitulo Eleitor inválido...", vbInformation, "Aviso"
Cancel = True
End If
End Sub
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Robson Santos
Mensagens: 3
Registrado em: 22 Jun 2016, 19:27

Re: Validador de Titulo de Eleitor

Mensagempor Robson Santos » 22 Jun 2016, 21:48

Excelente meu amigo!

Agora roda 100% :D

A exceção é o campo vazio, que acusa "Null", mas isso acho que resolvo. :mrgreen:
Abraços

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Off- Assuntos variados”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 2 visitantes