Com este função, escrita em PL/SQL, é possível validar o dígito verificador do título de eleitor brasileiro.
PL/SQL para quem não conhece é a linguagem que roda dentro do banco de dados Oracle.
Para utilizar a função, basta passar por parâmetro o número do título de eleitor, a função retornará True caso o título seja válido e False para um título inválido.
FUNCTION valida_titulo (In_tit_eleitor IN VARCHAR2) RETURN BOOLEAN IS TYPE Titulo_invalido IS TABLE OF VARCHAR2 (12); T_titulo_invalido Titulo_invalido := Titulo_invalido ('000000000000'); I BINARY_INTEGER := 0; J BINARY_INTEGER := 0; Digito1 NUMBER := 0; Digito2 NUMBER := 0; Decr1 NUMBER := 9; BEGIN IF LENGTH (In_tit_eleitor) = 12 THEN -- FOR I IN 1 .. 8 LOOP Digito1 := (Digito1 + to_number (substr (In_tit_eleitor, I, 1) ) * Decr1); Decr1 := (Decr1 - 1); END LOOP; -- Digito1 := MOD (Digito1, 11); -- IF Digito1 IN (0, 1) THEN IF ( to_number (substr (In_tit_eleitor, 9, 1) ) = 0 AND ( to_number (substr (In_tit_eleitor, 10, 1) ) = 1 OR to_number (substr (In_tit_eleitor, 10, 1) ) = 2) ) THEN IF (Digito1 = 0) THEN Digito1 := 1; ELSE Digito1 := 0; END IF; ELSE Digito1 := 0; END IF; ELSE Digito1 := (11 - Digito1); END IF; -- IF Digito1 = to_number (substr (In_tit_eleitor, 11, 1) ) THEN J := 1; ELSE J := 0; END IF; -- IF J = 1 THEN Digito2 := (to_number (substr (In_tit_eleitor, 9, 1) ) * 4) + (to_number (substr (In_tit_eleitor, 10, 1) ) * 3) + (Digito1 * 2); Digito2 := MOD (Digito2, 11); -- IF ( (Digito2 = 0) OR (Digito2 = 1) ) THEN IF ( to_number (substr (In_tit_eleitor, 9, 1) ) = 0 AND ( to_number (substr (In_tit_eleitor, 10, 1) ) = 1 OR to_number (substr (In_tit_eleitor, 10, 1) ) = 2) ) THEN IF Digito2 = 0 THEN Digito2 := 1; ELSE Digito2 := 0; END IF; ELSE Digito2 := 0; END IF; ELSE Digito2 := (11 - Digito2); END IF; -- IF Digito2 <> to_number (substr (In_tit_eleitor, 12, 1) ) THEN J := 0; ELSE J := 1; END IF; -- END IF; END IF; -- IF J = 1 THEN IF In_tit_eleitor = T_titulo_invalido (1) THEN RETURN (FALSE); ELSE RETURN (TRUE); END IF; ELSE RETURN (FALSE); END IF; -- EXCEPTION WHEN OTHERS THEN RETURN (FALSE); END;