Fonte: www.activedelphi.com.br
Veja nesta dica como incrementar seu sistema acrescentando a validação do número eleitoral, com uma simples função desenvolvida baseando-se no Resolução do TSE.
Para entender como funciona o esquema de validação do título de eleitor devemos primeiro dar uma olhada na Resolução, de Nº 20.132 do dia 19/03/1998. Vejamos o que diz o artigo de número 10:
Art. 10 - Os Tribunais Regionais Eleitorais farão distribuir, observada a seqüência numérica fornecida pela Secretaria de Informática, às Zonas Eleitorais da respectiva Circunscrição, séries de números de inscrição eleitoral, a serem utilizados na forma deste artigo.
Parágrafo único - O número de inscrição compor-se-á de até 12 (doze) algarismos, por Unidade da Federação, assim discriminados:
a) os 8 (oito) primeiros algarismos serão seqüenciados, desprezando-se, na emissão, os zeros à esquerda;
b) os 2 (dois) algarismos seguintes serão representativos da Unidade da Federação de origem da inscrição, conforme códigos constantes da seguinte tabela:
01 - São Paulo
02 - Minas Gerais
03 - Rio de Janeiro
04 - Rio Grande do Sul
05 - Bahia
06 - Paraná
07 - Ceará
08 - Pernambuco
09 - Santa Catarina
10 - Goiás
11 - Maranhão
12 - Paraíba
13 - Pará
14 - Espírito Santo
15 - Piauí
16 - Rio Grande do Norte
17 - Alagoas
18 - Mato Grosso
19 - Mato Grosso do Sul
20 - Distrito Federal
21 - Sergipe
22 - Amazonas
23 - Rondônia
24 - Acre
25 - Amapá
26 - Roraima
27 - Tocantins
28 - Exterior (ZZ)
c) os 2 (dois) últimos algarismos constituirão dígitos verificadores, determinados com base no módulo 11 (onze), sendo o primeiro calculado sobre o número seqüencial e o último sobre o código da Unidade da Federação seguido do primeiro dígito verificador.
Resumindo: Os dígitos verificadores são calculados em duas etapas. Na primeira, calcula-se o módulo 11 sobre os 8 primeiros dígitos. Os estados de SP e MG possuem títulos com 13 dígitos, sendo assim, nestes casos devemos considerar os 9 primeiros algarismos. Na segunda etapa calculamos o módulo 11 sobre o código da UF + o primeiro dígito verificador.
Vejamos agora a função implementada:
function TForm2.valida_titulo(numero: String): Boolean;
var
intInd1,intInd2,intLimite : Integer;
intSoma,intDigito : Integer;
strDVc,strSequencial : String;
strUF,strDV1,strDV2 : String;
begin
numero := Trim(numero);
while (Length(numero) < 13) do numero := '0' + numero;
intInd1 := 0; intInd2 := 0; strDVc := '';
strSequencial := Copy(numero,1,9);
strUF := Copy(numero,10,2);
strDV1 := Copy(numero,12,1);
strDV2 := Copy(numero,13,1);
{Verifca se a UF estiver entre os código possíveis, de 1(SP) até 28(ZZ-Exterior)}
if ((StrToInt(strUF) > 0) and (StrToInt(strUF) < 29)) then
begin
intLimite := 9;
{Loop para calcular os 2 dígitos verificadores}
for intInd1 := 1 to 2 do
begin
intSoma := 0;
{Calcula a soma para submeter ao módulo 11}
for intInd2 := 1 to intLimite do
begin
intSoma := intSoma + StrToInt(Copy(strSequencial,intInd2,1)) * (intLimite + 2 - intInd2);
end;
{Pega o resto da dívisão, o módulo, por 11}
intDigito := intSoma mod 11;
{ Se a UF for SP ou MG}
if (StrToInt(strUF) in [1,2]) then
begin
if (intDigito = 1) then intDigito := 0
else if (intDigito = 0) then intDigito := 1
else intDigito := 11 - intDigito;
end
{ Outros UF e Exterior}
else begin
if ((intDigito = 1) or (intDigito = 0)) then intDigito := 0
else intDigito := 11 - intDigito;
end;
{Atribui à variavel strDVc o dígito calculado}
strDVc := strDVc + IntToStr(intDigito);
{Muda o valor de intLimite para o cáculo do segundo dígito}
intLimite:= 3;
{O cálculo do segundo dígito será sobre o código da UF + primeiro dígito verificador}
strSequencial:= strUF + IntToStr(intDigito);
end;
end;
result := (strDV1+strDV2 = strDVc);
end;
Para usá-la é bastante simples. Adicione ao seu form um Edit e um Button. No evento onClick deste Button, faça:
procedure TForm2.Button1Click(Sender: TObject);
begin
if valida_titulo(Edit1.Text) then
MessageDlg('Título Válido', mtInformation, [mbOk], 0)
else
MessageDlg('Título Inválido', mtWarning, [mbOk], 0);
end;
Pronto! Agora basta rodar o aplicativo, informar um número qualquer de título eleitoral que você verá a mensagem "Título Válido", a menos que o número informado esteja incorreto! :-)
Para entender como funciona o esquema de validação do título de eleitor devemos primeiro dar uma olhada na Resolução, de Nº 20.132 do dia 19/03/1998. Vejamos o que diz o artigo de número 10:
Art. 10 - Os Tribunais Regionais Eleitorais farão distribuir, observada a seqüência numérica fornecida pela Secretaria de Informática, às Zonas Eleitorais da respectiva Circunscrição, séries de números de inscrição eleitoral, a serem utilizados na forma deste artigo.
Parágrafo único - O número de inscrição compor-se-á de até 12 (doze) algarismos, por Unidade da Federação, assim discriminados:
a) os 8 (oito) primeiros algarismos serão seqüenciados, desprezando-se, na emissão, os zeros à esquerda;
b) os 2 (dois) algarismos seguintes serão representativos da Unidade da Federação de origem da inscrição, conforme códigos constantes da seguinte tabela:
01 - São Paulo
02 - Minas Gerais
03 - Rio de Janeiro
04 - Rio Grande do Sul
05 - Bahia
06 - Paraná
07 - Ceará
08 - Pernambuco
09 - Santa Catarina
10 - Goiás
11 - Maranhão
12 - Paraíba
13 - Pará
14 - Espírito Santo
15 - Piauí
16 - Rio Grande do Norte
17 - Alagoas
18 - Mato Grosso
19 - Mato Grosso do Sul
20 - Distrito Federal
21 - Sergipe
22 - Amazonas
23 - Rondônia
24 - Acre
25 - Amapá
26 - Roraima
27 - Tocantins
28 - Exterior (ZZ)
c) os 2 (dois) últimos algarismos constituirão dígitos verificadores, determinados com base no módulo 11 (onze), sendo o primeiro calculado sobre o número seqüencial e o último sobre o código da Unidade da Federação seguido do primeiro dígito verificador.
Resumindo: Os dígitos verificadores são calculados em duas etapas. Na primeira, calcula-se o módulo 11 sobre os 8 primeiros dígitos. Os estados de SP e MG possuem títulos com 13 dígitos, sendo assim, nestes casos devemos considerar os 9 primeiros algarismos. Na segunda etapa calculamos o módulo 11 sobre o código da UF + o primeiro dígito verificador.
Vejamos agora a função implementada:
function TForm2.valida_titulo(numero: String): Boolean;
var
intInd1,intInd2,intLimite : Integer;
intSoma,intDigito : Integer;
strDVc,strSequencial : String;
strUF,strDV1,strDV2 : String;
begin
numero := Trim(numero);
while (Length(numero) < 13) do numero := '0' + numero;
intInd1 := 0; intInd2 := 0; strDVc := '';
strSequencial := Copy(numero,1,9);
strUF := Copy(numero,10,2);
strDV1 := Copy(numero,12,1);
strDV2 := Copy(numero,13,1);
{Verifca se a UF estiver entre os código possíveis, de 1(SP) até 28(ZZ-Exterior)}
if ((StrToInt(strUF) > 0) and (StrToInt(strUF) < 29)) then
begin
intLimite := 9;
{Loop para calcular os 2 dígitos verificadores}
for intInd1 := 1 to 2 do
begin
intSoma := 0;
{Calcula a soma para submeter ao módulo 11}
for intInd2 := 1 to intLimite do
begin
intSoma := intSoma + StrToInt(Copy(strSequencial,intInd2,1)) * (intLimite + 2 - intInd2);
end;
{Pega o resto da dívisão, o módulo, por 11}
intDigito := intSoma mod 11;
{ Se a UF for SP ou MG}
if (StrToInt(strUF) in [1,2]) then
begin
if (intDigito = 1) then intDigito := 0
else if (intDigito = 0) then intDigito := 1
else intDigito := 11 - intDigito;
end
{ Outros UF e Exterior}
else begin
if ((intDigito = 1) or (intDigito = 0)) then intDigito := 0
else intDigito := 11 - intDigito;
end;
{Atribui à variavel strDVc o dígito calculado}
strDVc := strDVc + IntToStr(intDigito);
{Muda o valor de intLimite para o cáculo do segundo dígito}
intLimite:= 3;
{O cálculo do segundo dígito será sobre o código da UF + primeiro dígito verificador}
strSequencial:= strUF + IntToStr(intDigito);
end;
end;
result := (strDV1+strDV2 = strDVc);
end;
Para usá-la é bastante simples. Adicione ao seu form um Edit e um Button. No evento onClick deste Button, faça:
procedure TForm2.Button1Click(Sender: TObject);
begin
if valida_titulo(Edit1.Text) then
MessageDlg('Título Válido', mtInformation, [mbOk], 0)
else
MessageDlg('Título Inválido', mtWarning, [mbOk], 0);
end;
Pronto! Agora basta rodar o aplicativo, informar um número qualquer de título eleitoral que você verá a mensagem "Título Válido", a menos que o número informado esteja incorreto! :-)
Nenhum comentário:
Postar um comentário