Validação Título Eleitoral

09/08/2004

Estou precisando de uma rotina para validação de título eleitoral. Alguém pode me fornecer?


Obrigado!!!


Welington

Respostas

10/08/2004

Cafosys

Não testei nenhuma das opções mais ai vai dois exemplos


//exemplo 1

function ValidaTituloEleitor(sTitulo: string; MostraMsg: boolean = True): boolean;
const
Multiplicadores: array[1..11] of shortint = (10,9,8,7,6,5,4,3,2,4,3);
var
iCont, iAux, DigCalculado, DigInformado: shortint;
iDigito: integer;
begin
result := false;
if Length(stitulo) = 0 then
exit;

stitulo := StringOfChar(´0´,13-Length(stitulo))+stitulo; // 13 posições
iAux := StrToInt(Copy(stitulo,10,2)); // valor para auxiliar o cálculo do dígito

// dígito verificador
DigInformado := StrToInt(Copy(stitulo,12,2));;
DigCalculado := 0;

iDigito := 0;
for iCont := 1 to 11 do
begin
iDigito := iDigito + (StrToInt(stitulo[iCont]) * Multiplicadores[iCont]);
if iCont in [9,11] then
begin
iDigito := iDigito mod 11;
if iDigito > 1 then
iDigito := 11 - iDigito
else
begin
if iAux <= 2 then
iDigito := 1 - iDigito
else
iDigito := 0;
end;
if iCont = 9
then Digcalculado := iDigito * 10
else Digcalculado := Digcalculado + iDigito;
iDigito := iDigito * 2;
end;
end;

// verifica se o digito é verdadeiro
Result := DigCalculado = DigInformado;

if not Result and MostraMsg then
Application.MessageBox(´Número do título de eleitor inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;
(´0´,13-Length(stitulo))+stitulo; // 13 posições
iAux := StrToInt(Copy(stitulo,10,2)); // valor para auxiliar o cálculo do dígito

// dígito verificador
DigInformado := StrToInt(Copy(stitulo,12,2));;
DigCalculado := 0;

iDigito := 0;
for iCont := 1 to 11 do
begin
iDigito := iDigito + (StrToInt(stitulo[iCont]) * Multiplicadores[iCont]);
if iCont in [9,11] then
begin
iDigito := iDigito mod 11;
if iDigito > 1 then
iDigito := 11 - iDigito
else
begin
if iAux <= 2 then
iDigito := 1 - iDigito
else
iDigito := 0;
end;
if iCont = 9
then Digcalculado := iDigito * 10
else Digcalculado := Digcalculado + iDigito;
iDigito := iDigito * 2;
end;
end;

// verifica se o digito é verdadeiro
Result := DigCalculado = DigInformado;

if not Result and MostraMsg then
Application.MessageBox(´Número do título de eleitor inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;



//exemplo 2


Function TNTWBasEdt.ValidTIT(Valor: String): Boolean;
{função para validação do titulo de eleitor}
var i, j, iPriDig, iSegDig: Integer;
begin
Result:=false;//se o codigo passado for vazio ou nulo cai fora
if Length(Valor) = 0 then
Exit;

Valor:=AlinhaTX(Valor, ´d´, 13, ´0´);//alinha e preenche com zeros as 13 posicoes necessarias
j:=StrToInt(Copy(Valor, 9, 2)); //essa questao das 2 posicoes falta confirmar com o TSE

//primeiro numero do digito
iPriDig:=0;
for i:=1 to 9 do//executa as somatorias e multiplicacoes
iPriDig:=iPriDig + StrToInt(Valor[i]) * (10 - (i - 1));
iPriDig:=iPriDig mod 11;//resolve o modulo 11
if iPriDig > 1 then //calcula o digito especifico
iPriDig:=11 - iPriDig
else
begin
if j <= 2 then
iPriDig:=1 - iPriDig
else
iPriDig:=0;
end;
//segundo numero do digito
iSegDig:=iPriDig * 2;//dobra o primeiro digito
for i:=10 to 11 do //e executa as somatorias
iSegDig:=iSegDig + StrToInt(Valor[i]) * (13 - (i - 1));
iSegDig:=iSegDig mod 11;
if iSegDig > 1 then
iSegDig:=11 - iSegDig
else
begin
if j <= 2 then
iSegDig:=1 - iSegDig
else
iSegDig:=0;
end;
//valida se o digito é verdadeiro
Result:=(IntToStr(iPriDig) + IntToStr(iSegDig)) = Copy(Valor, 12, 2);
end;


Responder Citar

10/08/2004

Emerson

Tente essa:

function ValidaTituloEleitor(sTitulo: string; MostraMsg: boolean = True): boolean;
const
    Multiplicadores: array[1..11] of shortint = (10,9,8,7,6,5,4,3,2,4,3);
var
    iCont, iAux, DigCalculado, DigInformado: shortint;
    iDigito: integer;
begin
    result := false;
    if Length(stitulo) = 0 then
        exit;

    stitulo := StringOfChar(´0´,13-Length(stitulo))+stitulo; // 13 posições
    iAux := StrToInt(Copy(stitulo,10,2)); // valor para auxiliar o cálculo do dígito

    // dígito verificador
    DigInformado := StrToInt(Copy(stitulo,12,2));;
    DigCalculado := 0;

    iDigito := 0;
    for iCont := 1 to 11 do
    begin
        iDigito := iDigito + (StrToInt(stitulo[iCont]) * Multiplicadores[iCont]);
        if iCont in [9,11] then
        begin
            iDigito := iDigito mod 11;
            if iDigito > 1 then
                iDigito := 11 - iDigito
            else
            begin
                if iAux <= 2 then
                    iDigito := 1 - iDigito
                else
                    iDigito := 0;
            end;
            if iCont = 9
            then Digcalculado := iDigito * 10
            else Digcalculado := Digcalculado + iDigito;
            iDigito := iDigito * 2;
        end;
    end;

    // verifica se o digito é verdadeiro
    Result := DigCalculado = DigInformado;

    if not Result and MostraMsg then
        Application.MessageBox(´Número do título de eleitor inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;


Responder Citar