Validação de Título de Eleitor

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Validação de Título de Eleitor

Mensagem por Maligno »

Código: Selecionar todos

//**************************************************************************************************
function ValidTTE(cDoc) // O número do documento deverá ter 12 caracteres de largura, completado com
local cDV := ""         // zeros à esquerda, se necessário.
*
if Val(cDoc) > 0
   cDV := Modulo11(  Left(cDoc,8  )    ,2,9)
   cDV += Modulo11(SubStr(cDoc,9,2)+cDV,2,4)
end
return cDV == Right(cDoc,2)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Validação de Título de Eleitor

Mensagem por Kapiaba »

Estou precisando de algo assim, me parece que esta função está incompleta, se alguém tiver, poderia por gentileza disponibilizar?

Obg. abs.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Validação de Título de Eleitor

Mensagem por fladimir »

Pessoal, um colega perguntou se eu sabia como fazer, pesquisando achei alguns exemplos em outras linguagens e migrei para nossa.

Segue abaixo exemplo.

PORÉM SEGUINTE: Testei a validação de 3 nrs de título e deram certo, mas o do colega em questão não deu certo, então se puderem dar uma olhada e testarem tb agradeço...

Seguem tb links de onde foi baseado o código.

Código: Selecionar todos

Proc Main()
	local cTitulo := SPACE(12), lOk := .F.,;
			cMsg := 'T¡tulo Eleitoral '	
	
	cls
	@ 10,10 say 'Informe o Nr. do T¡tulo: ' GET cTitulo PICT '999999999999'
	READ
	
	IF lastkey()==27 .or. Empty(ctitulo)
		quit
	endif
	
	lOk := ValidaTituloEleitor(cTitulo) 
	
	Alert( cMsg + IF( lOk, 'Valido','Invalido') )
	
return
	
function ValidaTituloEleitor( cTitulo )
	local d1  := 0,	 d2 := 0,	    d3 := 0,	 d4 := 0,;
	   	d5  := 0,    d6 := 0,	    d7 := 0,	 d8 := 0,;
			d9  := 0,	d10 := 0,	   d11 := 0,	d12 := 0,;
			DV1 := 0,	DV2 := 0,	UltDig := 0, lOk := .F.

	cTitulo := ALLTRIM(cTitulo)
	
	*-- Completa com zeros a esquerda caso nao esteja com os 12 digitos
	if Len(cTitulo) < 12 
	    cTitulo = PADL(cTitulo, 12, '0') 
	endIf

	*-- 'Pega a posicao do ultimo digito
	UltDig := Len(cTitulo)

	*-- Sai da funcao caso a esteja vazia
	if cTitulo = "000000000000" 
       return .F.
	endIf

	*-- Pega cada digito do CPF informado e coloca nas variáveis especificas
	d1  = Int(VAL(SUBSTR(cTitulo, UltDig - 11, 1)))
	d2  = Int(VAL(SUBSTR(cTitulo, UltDig - 10, 1)))
	d3  = Int(VAL(SUBSTR(cTitulo, UltDig - 9, 1)))
	d4  = Int(VAL(SUBSTR(cTitulo, UltDig - 8, 1)))
	d5  = Int(VAL(SUBSTR(cTitulo, UltDig - 7, 1)))
	d6  = Int(VAL(SUBSTR(cTitulo, UltDig - 6, 1)))
	d7  = Int(VAL(SUBSTR(cTitulo, UltDig - 5, 1)))
	d8  = Int(VAL(SUBSTR(cTitulo, UltDig - 4, 1)))
	d9  = Int(VAL(SUBSTR(cTitulo, UltDig - 3, 1)))
	d10 = Int(VAL(SUBSTR(cTitulo, UltDig - 2, 1)))
	d11 = Int(VAL(SUBSTR(cTitulo, UltDig - 1, 1))) 
	d12 = Int(VAL(SUBSTR(cTitulo, UltDig,     1))) 

	//----------- Aqui e 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 := Mod(DV1,11)    //'Obtem o resto

	//se o resto for igual a 10 altera pra 0
	If DV1 = 10 
	    DV1 := 0
	EndIf

	DV2 = (d9 * 7) + (d10 * 8) + (DV1 * 9)
	DV2 = MOD(DV2,11) //    Obtem o resto

	//se o resto for igual a 10 altera pra 0
	If DV2 = 10 
	    DV2 = 0
	EndIf

	*---------- Fazendo a comparação dos dvs informados -------
	If d11 == DV1 .And. d12 = DV2 
	    If Int(d9 + d10) > 0 .And. Int(d9 + d10) < 29 
	        lOk := .T.
	    EndIf
	EndIf
   
return lOk
[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Validação de Título de Eleitor

Mensagem por Kapiaba »

Teste este por favor:

Código: Selecionar todos

/**
* Função para validar Título Eleitoral
*
*/
Function TestaTitulo(pTitulo)
Local digito1 := 0
Local digito2 := 0
Local decr1 := 9
Local i := 0
Local j := 0
Local cTitulo := StrZero(Val(pTitulo),12)

If !Empty(pTitulo) .AND. pTitulo != '000000000000' 

   For i:=1 To 8
       digito1 := (digito1 + Val(SubStr(cTitulo,i,1)) * decr1)
       decr1:= (decr1 - 1)
   Next

   digito1 := digito1% 11

   If digito1 == 0  .or. digito1 == 1
      If Val(substr(cTitulo,9,1))== 0 .and. (Val(SubStr(cTitulo,10,1)) == 1 .or. Val(SubStr(cTitulo,10,1)) == 2)
         If digito1 = 0
            digito1 := 1 
         Else 
		      digito1 := 0
         Endif
      Else 
         digito1 := 0 
      EndIf
   else 
      digito1 := (11 - digito1)
   EndIf

   If (digito1 = Val(SubStr(cTitulo,11,1))) 
      j := 1
   Else 
      j := 0
   EndIf
   If (j = 1)
      digito2 := (Val(SubStr(cTitulo,9,1))*4) + (Val(SubStr(cTitulo,10,1))*3) + (digito1*2)
      digito2 := digito2 % 11
      If ((digito2 = 0 ) .or. (digito2 = 1))
         If (Val(SubStr(cTitulo,9,1))= 0 .and. (Val(SubStr(cTitulo,10,1)) = 1 .or. Val(SubStr(cTitulo,10,1)) = 2))
            If digito2 = 0
               digito2 := 1 
            Else 
   			   digito2 := 0
            EndIf
         Else
		      digito2 := 0 
         EndIf
      Else 
	      digito2 := (11 - digito2)
      Endif
   
	   If (digito2 <> Val(substr(cTitulo,12,1)))
         j := 0
      Else 
	      j := 1
      EndIf
   Endif   
EndIf

If (j = 1)
  If Empty(pTitulo) .or. pTitulo == '000000000000' 
     Return .F.
  Else 
     Return .T.
  Endif   
Else
   Return .F.  
EndIf 

Return .T. 
Obg. abs.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Validação de Título de Eleitor

Mensagem por fladimir »

Essa ficou melhor e deu certo inclusive o titulo do colega.

vlw
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Responder