From d29755250c23bbb9c5b7cba6fbb01c0ddd5db9d2 Mon Sep 17 00:00:00 2001 From: ekondrat Date: Wed, 23 Oct 2019 16:12:26 -0300 Subject: [PATCH 1/4] =?UTF-8?q?Adicionando=20valida=C3=A7=C3=A3o=20de=20ce?= =?UTF-8?q?rtid=C3=A3o=20de=20nascimento/casamento/=C3=B3bito?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++ src/validator-docs/Validator.php | 52 ++++++++++++++++++++++++ src/validator-docs/ValidatorProvider.php | 2 + tests/TestValidator.php | 39 ++++++++++++++++++ 4 files changed, 110 insertions(+) diff --git a/README.md b/README.md index 67d6592..d2eea1b 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,14 @@ $this->validate($request, [ ]); ``` +* **certidao** - Verifica se uma certidão de nascimento/casamento/óbito é válida. + +```php +$this->validate($request, [ + 'nis' => 'required|certidao', +]); +``` + * **formato_cnpj** - Verifica se o formato de um CNPJ é válida. ( 99.999.999/9999-99 ) ```php @@ -122,6 +130,14 @@ $this->validate($request, [ 'formato_nis' => 'required|formato_nis', ]); ``` + +* **formato_certidao** - Verifica se o formato de uma certidão é válida. ( 99999.99.99.9999.9.99999.999.9999999-99 ou 99999 99 99 9999 9 99999 999 9999999 99) + +```php +$this->validate($request, [ + 'formato_certidao' => 'required|formato_certidao', +]); +``` ---------------------------------------------------------------------------------------------------------------------------- ## Combinando validação e formato @@ -166,6 +182,7 @@ public function store(Request $request) * **CNPJ** - http://www.geradorcnpj.com/ * **CPF** - http://geradordecpf.org * **NIS** - https://www.4devs.com.br/gerador_de_pis_pasep +* **CERTIDÃO** - https://www.treinaweb.com.br/ferramentas-para-desenvolvedores/gerador/certidao Fique a vontade para contribuir fazendo um fork. diff --git a/src/validator-docs/Validator.php b/src/validator-docs/Validator.php index ee9c6d9..ee9a2c3 100644 --- a/src/validator-docs/Validator.php +++ b/src/validator-docs/Validator.php @@ -38,6 +38,14 @@ protected function validateFormatoNis($attribute, $value) return preg_match('/^\d{3}\.\d{5}\.\d{2}-\d{1}$/', $value) > 0; } + /* + * O Número de Matrícula tem a configuração aaaaaa.bb.cc.dddd.e.fffff.ggg.hhhhhhh-ii + */ + protected function validateFormatoCertidao($attribute, $value) + { + return preg_match('/^\d{6}[. ]\d{2}[. ]\d{2}[. ]\d{4}[. ]\d{1}[. ]\d{5}[. ]\d{3}[. ]\d{7}[- ]\d{2}$/', $value) > 0; + } + protected function validateCpf($attribute, $value) { $c = preg_replace('/\D/', '', $value); @@ -191,4 +199,48 @@ protected function validateNis($attribute, $value) return ($nis[10] == (((10 * $d) % 11) % 10)); } + + /* + * CERTIDÃO DE NASCIMENTO/CASAMENTO/ÓBITO + * Fonte: http://ghiorzi.org/DVnew.htm#zc + * + * Nota: se o resto for "10", o DV será "1" + */ + protected function validateCertidao($attribute, $value) + { + // Remove não numericos + $certidao = preg_replace('/[^\d]/', '', $value); + + if (!preg_match("/[0-9]{32}/", $certidao)) { + return false; + } + + $num = substr($certidao, 0, -2); + $dv = substr($certidao, -2); + + $dv1 = $this->somaPonderadaCertidao($num) % 11; + $dv1 = $dv1 > 9 ? 1 : $dv1; + $dv2 = $this->somaPonderadaCertidao($num.$dv1) % 11; + $dv2 = $dv2 > 9 ? 1 : $dv2; + + // Compara o dv recebido com os dois numeros calculados + if ($dv === $dv1.$dv2) { + return true; + } else { + return false; + } + } + + private function somaPonderadaCertidao($value) { + $soma = 0; + + $multiplicador = 32 - strlen($value); + for ($i = 0; $i < strlen($value); $i++) { + $soma += $value[$i] * $multiplicador; + + $multiplicador += 1; + $multiplicador = $multiplicador > 10 ? 0 : $multiplicador; + } + return $soma; + } } diff --git a/src/validator-docs/ValidatorProvider.php b/src/validator-docs/ValidatorProvider.php index d62491f..e327215 100644 --- a/src/validator-docs/ValidatorProvider.php +++ b/src/validator-docs/ValidatorProvider.php @@ -42,10 +42,12 @@ protected function getMessages() 'cpf' => 'CPF inválido', 'cpf_cnpj' => 'CPF ou CNPJ inválido', 'nis' => 'PIS/PASEP/NIT/NIS inválido', + 'certidao' => 'Número da Certidão inválido', 'formato_cnpj' => 'Formato inválido para CNPJ', 'formato_cpf' => 'Formato inválido para CPF', 'formato_cpf_cnpj' => 'Formato inválido para CPF ou CNPJ', 'formato_nis' => 'Formato inválido para PIS/PASEP/NIT/NIS', + 'formato_certidao' => 'Formato inválido para Certidão', ]; } diff --git a/tests/TestValidator.php b/tests/TestValidator.php index 56d96f1..b4bc056 100644 --- a/tests/TestValidator.php +++ b/tests/TestValidator.php @@ -180,4 +180,43 @@ public function testNisFormato() $this->assertTrue($incorrect->fails()); } + public function testCertidao() + { + $correct = \Validator::make( + ['certo' => '659447 02 55 9015 1 99679 468 2559590-16'], + ['certo' => 'certidao'] + ); + + $incorrect = \Validator::make( + ['errado' => '659447 02 55 2015 1 27861 468 2559590-32'], + ['errado' => 'certidao'] + ); + + $this->assertTrue($correct->passes()); + $this->assertTrue($incorrect->fails()); + } + + public function testCertidaoFormato() + { + $correct = \Validator::make( + ['certo' => '434546.02.55.2019.1.71037.134.6484858-10'], + ['certo' => 'formato-certidao'] + ); + + $incorrect = \Validator::make( + ['errado' => '201.733.7434-9'], + ['errado' => 'formato-certidao'] + ); + + $this->assertTrue($correct->passes()); + $this->assertTrue($incorrect->fails()); + + // com ' ' no lugar de '.' + $correct = \Validator::make( + ['certo' => '434546 02 55 2019 1 71037 134 6484858 10'], + ['certo' => 'formato-certidao'] + ); + $this->assertTrue($correct->passes()); + } + } From eda6902b5c4011fc6538357c85ed3602904a6291 Mon Sep 17 00:00:00 2001 From: ekondrat Date: Wed, 23 Oct 2019 16:15:30 -0300 Subject: [PATCH 2/4] =?UTF-8?q?Adicionando=20valida=C3=A7=C3=A3o=20de=20ce?= =?UTF-8?q?rtid=C3=A3o=20no=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2eea1b..0f9d104 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ _Validação de documentos do Brasil usando **Laravel 6**_ > Para a versão compatível com Laravel 5 consulte o branch https://github.com/geekcom/validator-docs/tree/5.x.x -Biblioteca Laravel para validação de CPF, CNPJ, CPF/CNPJ (quando salvos no mesmo atributo), CNH, PIS/PASEP/NIT/NIS e Título de Eleitor. +Biblioteca Laravel para validação de CPF, CNPJ, CPF/CNPJ (quando salvos no mesmo atributo), CNH, PIS/PASEP/NIT/NIS, Título de Eleitor e Certidões(nascimento/casamento/óbito). ## Instalação From a721badcb911556b97b7e8858835e5266834471b Mon Sep 17 00:00:00 2001 From: ekondrat Date: Wed, 23 Oct 2019 16:23:53 -0300 Subject: [PATCH 3/4] Arrumando Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0f9d104..207c099 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ $this->validate($request, [ ```php $this->validate($request, [ - 'nis' => 'required|certidao', + 'certidao' => 'required|certidao', ]); ``` From 2d690dc5742b2c06cf383a1262c4de2c80f126c5 Mon Sep 17 00:00:00 2001 From: ekondrat Date: Wed, 23 Oct 2019 17:44:14 -0300 Subject: [PATCH 4/4] Corrigindo erro no merge --- src/validator-docs/Validator.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/validator-docs/Validator.php b/src/validator-docs/Validator.php index 0c294a6..c134e2a 100644 --- a/src/validator-docs/Validator.php +++ b/src/validator-docs/Validator.php @@ -264,5 +264,7 @@ private function somaPonderadaCertidao($value) { $multiplicador += 1; $multiplicador = $multiplicador > 10 ? 0 : $multiplicador; } + + return $soma; } }