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
  • . 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 := [COLOR=#000066]'0'[/COLOR] + numero;
    intInd1 := 0; intInd2 := 0; strDVc := [COLOR=#000066]''[/COLOR];
    strSequencial := Copy(numero,1,9);
    strUF := Copy(numero,10,2);
    strDV1 := Copy(numero,12,1);
    strDV2 := Copy(numero,13,1);
    [COLOR=#000066]{Verifca se a UF estiver entre os código possíveis, de 1(SP) até 28(ZZ-Exterior)**[/COLOR]
    if ((StrToInt(strUF) > 0) and (StrToInt(strUF) < 29)) then
    begin

    intLimite := 9;
    [COLOR=#000066]{Loop para calcular os 2 dígitos verificadores**[/COLOR]
    for intInd1 := 1 to 2 do
    begin

    intSoma := 0;
    [COLOR=#000066]{Calcula a soma para submeter ao módulo 11**[/COLOR]
    for intInd2 := 1 to intLimite do
    begin

    intSoma := intSoma + StrToInt(Copy(strSequencial,intInd2,1)) * (intLimite + 2 - intInd2);
    end ;
    [COLOR=#000066]{Pega o resto da dívisão, o módulo, por 11**[/COLOR]
    intDigito := intSoma mod 11;
    [COLOR=#000066]** Se a UF for SP ou MG**[/COLOR]
    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
    [COLOR=#000066]** Outros UF e Exterior**[/COLOR]
    else begin
    if ((intDigito = 1) or (intDigito = 0)) then intDigito := 0
    else intDigito := 11 - intDigito;
    end;
    [COLOR=#000066]{Atribui à variavel strDVc o dígito calculado**[/COLOR]
    strDVc := strDVc + IntToStr(intDigito);
    [COLOR=#000066]{Muda o valor de intLimite para o cáculo do segundo dígito**[/COLOR]
    intLimite:= 3;
    [COLOR=#000066]{O cálculo do segundo dígito será sobre o código da UF + primeiro dígito verificador**[/COLOR]
    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([COLOR=#000066]'Título Válido'[/COLOR], mtInformation, [mbOk], 0)
    else
    MessageDlg([COLOR=#000066]'Título Inválido'[/COLOR], 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! :-)


    Creditos: William Gustavo Ourives Maciel


    › Veja Mais: Validando Número do Título Eleitoral