Escolar Documentos
Profissional Documentos
Cultura Documentos
Com esta funo, escrita em PL/SQL, possvel validar o dgito verificador do ttulo de eleitor
brasileiro.
Para utilizar a funo, basta passar por parmetro o nmero do ttulo de eleitor, a funo
retornar True caso o ttulo seja vlido e False para um ttulo invlido.
1 FUNCTION valida_titulo (In_tit_eleitor IN VARCHAR2) RETURN BOOLEAN IS
2
TYPE Titulo_invalido IS TABLE OF VARCHAR2 (12);
3
4
T_titulo_invalido Titulo_invalido := Titulo_invalido ('000000000000');
5
I
BINARY_INTEGER := 0;
6
J
BINARY_INTEGER := 0;
7
Digito1
NUMBER
:= 0;
8
Digito2
NUMBER
:= 0;
9
Decr1
NUMBER
:= 9;
10
BEGIN
11
IF LENGTH (In_tit_eleitor) = 12 THEN
12
-13
FOR I IN 1 .. 8 LOOP
14
Digito1 := (Digito1 + to_number (substr (In_tit_eleitor, I, 1) ) * Decr1);
15
Decr1 := (Decr1 - 1);
16
END LOOP;
17
18
-19
Digito1 := MOD (Digito1, 11);
20
21
-22
IF Digito1 IN (0, 1) THEN
23
IF ( to_number (substr (In_tit_eleitor, 9, 1) ) = 0
24
AND ( to_number (substr (In_tit_eleitor, 10, 1) ) = 1
25
OR to_number (substr (In_tit_eleitor, 10, 1) ) = 2) ) THEN
26
IF (Digito1 = 0) THEN
27
Digito1 := 1;
28
ELSE
29
Digito1 := 0;
30
END IF;
31
ELSE
32
Digito1 := 0;
33
END IF;
34
ELSE
35
Digito1 := (11 - Digito1);
36
END IF;
37
38
-39
IF Digito1 = to_number (substr (In_tit_eleitor, 11, 1) ) THEN
40
J
:= 1;
41
ELSE
42
J
:= 0;
43
END IF;
44
45
-46
IF J = 1 THEN
47
Digito2 :=
48
(to_number (substr (In_tit_eleitor, 9, 1) ) * 4) + (to_number (substr
(In_tit_eleitor, 10, 1) ) * 3)
49
+ (Digito1 * 2);
50
Digito2 := MOD (Digito2, 11);
51
52
-53
IF ( (Digito2 = 0)
54
OR (Digito2 = 1) ) THEN
55
IF ( to_number (substr (In_tit_eleitor, 9, 1) ) = 0
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
48
49
50
51
52
53
J
:= J - 7 * (trunc (J / 7) );
L
:= I - J;
M
:= 3 + trunc ( (L + 40) / 44);
D
:= L + 28 - 31 * (trunc (M / 4) );
RETURN (TO_DATE (lpad (D, 2, 0) || lpad (M, 2, 0) || lpad (A, 4, 0), 'DDMMYYYY') );
END;