Skip to content

Commit 3214559

Browse files
authored
Merge pull request #5 from andrergcosta/validar_titulo_eleitor
Validar título eleitor
2 parents d6d2dc7 + 8c1dc8f commit 3214559

File tree

4 files changed

+88
-6
lines changed

4 files changed

+88
-6
lines changed

README.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/geekcom/validator-docs/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/geekcom/validator-docs/?branch=master)
44

5-
Biblioteca Laravel para validação de CPF, CNPJ, CPF/CNPJ (quando salvos no mesmo atributo) e CNH.
5+
Biblioteca Laravel para validação de CPF, CNPJ, CPF/CNPJ (quando salvos no mesmo atributo), CNH e Título de Eleitor.
66

77
# Instalação
88

@@ -31,13 +31,14 @@ geekcom\ValidatorDocs\ValidatorProvider::class
3131
Para utilizar a validação agora, basta fazer o procedimento padrão do `Laravel`, confira na documentação especifica para a sua versão,
3232
a diferença é que agora, você terá os seguintes métodos de validação:
3333

34-
34+
* cnh - Verifica se uma CNH é valida. Para testar, basta utilizar o site http://4devs.com.br/gerador_de_cnh
35+
* titulo_eleitor - Verifica se um Título de Eleitor é valido. Para testar, basta utilizar o site http://4devs.com.br/gerador_de_titulo_de_eleitor
3536
* cnpj - Verifica se o CNPJ é valido. Para testar, basta utilizar o site http://www.geradorcnpj.com/
36-
* cpf - Verifica se o cpf é valido. Para testar, basta utilizar o site http://geradordecpf.org
37-
* cpf_cnpj - Verifica se é um cpf ou cnpj valido. Para testar, basta utilizar um dos sites acima
37+
* cpf - Verifica se o CPF é valido. Para testar, basta utilizar o site http://geradordecpf.org
38+
* cpf_cnpj - Verifica se é um CPF ou CNPJ valido. Para testar, basta utilizar um dos sites acima
3839
* formato_cnpj - Verifica se a mascara do CNPJ é válida. ( 99.999.999/9999-99 )
39-
* formato_cpf - Verifica se a mascara do cpf é válida. ( 999.999.999-99 )
40-
* formato_cpf_cnpj - Verifica se a mascara do cpf ou cnpj é válida. ( 999.999.999-99 ) ou ( 99.999.999/9999-99 )
40+
* formato_cpf - Verifica se a mascara do CPF é válida. ( 999.999.999-99 )
41+
* formato_cpf_cnpj - Verifica se a mascara do CPF ou CNPJ é válida. ( 999.999.999-99 ) ou ( 99.999.999/9999-99 )
4142

4243

4344
Então, podemos usar um simples teste onde dizemos que o campo CPF será obrigatório e usamos a biblioteca para validar:

src/validator-docs/Validator.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,68 @@ protected function validateCnh($attribute, $value)
161161
}
162162

163163
return $ret;
164+
}
165+
166+
/**
167+
* Valida se o Titulo de Eleitor é válido
168+
* @param string $attribute
169+
* @param string $value
170+
* @return boolean
171+
*/
172+
173+
protected function validateTituloEleitor($attribute, $value)
174+
{
175+
176+
$input = preg_replace('/[^\d]/', '', $value);
177+
178+
$uf = substr($input, -4, 2);
179+
180+
if (((strlen($input) < 5) || (strlen($input) > 13)) ||
181+
(str_repeat($input[1], strlen($input)) == $input) ||
182+
($uf < 1 || $uf > 28)) {
183+
return false;
184+
}
185+
186+
$dv = substr($input, -2);
187+
$base = 2;
188+
189+
$sequencia = substr($input, 0, -4);
190+
191+
for ($i = 0; $i < 2; $i++) {
192+
$fator = 9;
193+
$soma = 0;
194+
195+
for ($j = (strlen($sequencia) - 1); $j > -1; $j--) {
196+
$soma += $sequencia[$j] * $fator;
197+
198+
if ($fator == $base) {
199+
$fator = 10;
200+
}
201+
202+
$fator--;
203+
}
204+
205+
$digito = $soma % 11;
206+
207+
if (($digito == 0) and ($uf < 3)) {
208+
$digito = 1;
209+
} elseif ($digito == 10) {
210+
$digito = 0;
211+
}
212+
213+
if ($dv[$i] != $digito) {
214+
return false;
215+
}
216+
217+
switch ($i) {
218+
case '0':
219+
$sequencia = $uf . $digito;
220+
221+
break;
222+
}
223+
}
224+
225+
return true;
164226
}
165227

166228
}

src/validator-docs/ValidatorProvider.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ protected function getMessages()
3838
{
3939
return [
4040
'cnh' => 'O campo :attribute não é uma carteira nacional de habilitação válida',
41+
'titulo_eleitor' => 'O campo :attribute não é um título de eleitor válido',
4142
'cnpj' => 'O campo :attribute não é um CNPJ válido',
4243
'cpf' => 'O campo :attribute não é um CPF válido',
4344
'cpf_cnpj' => 'O campo :attribute não é válido',

tests/TestValidator.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,22 @@ public function testCnh()
128128
$this->assertTrue($incorrect->fails());
129129
}
130130

131+
132+
public function testTituloEleitor()
133+
{
134+
$correct = \Validator::make(
135+
['certo' => '3021260'],
136+
['certo' => 'titulo_eleitor']
137+
);
138+
139+
$incorrect = \Validator::make(
140+
['errado' => '1000101230190'],
141+
['errado' => 'titulo_eleitor']
142+
);
143+
144+
$this->assertTrue($correct->passes());
145+
146+
$this->assertTrue($incorrect->fails());
147+
}
148+
131149
}

0 commit comments

Comments
 (0)