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 := '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! :-)


    Creditos: William Gustavo Ourives Maciel


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