Skip to content

Commit 4675110

Browse files
authored
Merge pull request #1 from geekcom/master
sync
2 parents 2e19e5e + 44bfdaf commit 4675110

File tree

4 files changed

+68
-10
lines changed

4 files changed

+68
-10
lines changed

README.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ _Validação de documentos do Brasil usando **Laravel 6**_
77

88
> Para a versão compatível com Laravel 5 consulte o branch https://github.com/geekcom/validator-docs/tree/5.x.x
99
10-
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.
10+
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 Cartão Nacional de Saúde(CNS).
1111

1212
## Instalação
1313

1414
No arquivo `composer.json`, adicione validator-docs como dependência do seu projeto:
1515

1616
```
1717
"require": {
18-
"geekcom/validator-docs" : "2.*"
18+
"geekcom/validator-docs" : "^3.0"
1919
},
2020
```
2121

@@ -31,12 +31,6 @@ Ou simplesmente execute o comando:
3131
composer require geekcom/validator-docs
3232
```
3333

34-
Após a instalação, adicione ao arquivo `config/app.php` ao array `providers` a seguinte linha:
35-
36-
```php
37-
geekcom\ValidatorDocs\ValidatorProvider::class
38-
```
39-
4034
----------------------------------------------------------------------------------------------------------------------------
4135

4236
## Como usar - Validações disponíveis
@@ -91,6 +85,14 @@ $this->validate($request, [
9185
]);
9286
```
9387

88+
* **cns** - Verifica se um Cartão Nciona de Saúde (CNS) é válido.
89+
90+
```php
91+
$this->validate($request, [
92+
'cns' => 'required|cns',
93+
]);
94+
```
95+
9496
* **formato_cnpj** - Verifica se o formato de um CNPJ é válida. ( 99.999.999/9999-99 )
9597

9698
```php
@@ -126,7 +128,7 @@ $this->validate($request, [
126128

127129
## Combinando validação e formato
128130

129-
No exemplo abaixo, fazemos um teste onde verificamos a formatação e a validade de um CPF ou CNPJ, para os casos onde a informação deva ser salva em um mesmo atributo:
131+
No exemplo abaixo, fazemos um teste onde verificamos a formatação e a validade de um CPF ou CNPJ, para os casos onde a informação deve ser salva em um mesmo atributo:
130132

131133
```php
132134
$this->validate($request, [
@@ -151,6 +153,7 @@ public function store(Request $request)
151153
'cnh' => 'required|cnh',
152154
'titulo_eleitor' => 'required|titulo_eleitor',
153155
'nis' => 'required|nis',
156+
'cns' => 'required|cns',
154157
]);
155158

156159
dd($data);
@@ -166,6 +169,7 @@ public function store(Request $request)
166169
* **CNPJ** - http://www.geradorcnpj.com/
167170
* **CPF** - http://geradordecpf.org
168171
* **NIS** - https://www.4devs.com.br/gerador_de_pis_pasep
172+
* **CNS** - https://geradornv.com.br/gerador-cns/
169173

170174
Fique a vontade para contribuir fazendo um fork.
171175

src/validator-docs/Validator.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,27 @@ protected function validateNis($attribute, $value)
191191

192192
return ($nis[10] == (((10 * $d) % 11) % 10));
193193
}
194+
195+
protected function validateCns($attribute, $value)
196+
{
197+
$cns = preg_replace('/[^\d]/', '', $value);
198+
199+
// CNSs definitivos começam em 1 ou 2 / CNSs provisórios em 7, 8 ou 9
200+
if (preg_match("/[1-2][0-9]{10}00[0-1][0-9]/", $cns) || preg_match("/[7-9][0-9]{14}/", $cns)) {
201+
return $this->somaPonderadaCns($cns) % 11 == 0;
202+
}
203+
204+
return false;
205+
}
206+
207+
private function somaPonderadaCns($value)
208+
{
209+
$soma = 0;
210+
211+
for ($i = 0; $i < strlen($value); $i++) {
212+
$soma += $value[$i] * (15 - $i);
213+
}
214+
215+
return $soma;
216+
}
194217
}

src/validator-docs/ValidatorProvider.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ protected function getMessages()
4242
'cpf' => 'CPF inválido',
4343
'cpf_cnpj' => 'CPF ou CNPJ inválido',
4444
'nis' => 'PIS/PASEP/NIT/NIS inválido',
45+
'cns' => 'Cartão Nacional de Saúde inválido',
4546
'formato_cnpj' => 'Formato inválido para CNPJ',
4647
'formato_cpf' => 'Formato inválido para CPF',
4748
'formato_cpf_cnpj' => 'Formato inválido para CPF ou CNPJ',

tests/TestValidator.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public function testTituloEleitor()
145145

146146
$this->assertTrue($incorrect->fails());
147147
}
148-
148+
149149
public function testNis()
150150
{
151151
$correct = \Validator::make(
@@ -180,4 +180,34 @@ public function testNisFormato()
180180
$this->assertTrue($incorrect->fails());
181181
}
182182

183+
public function testCns()
184+
{
185+
// Definitiva
186+
$correct = \Validator::make(
187+
['certo' => '116 3876 9194 0009'],
188+
['certo' => 'cns']
189+
);
190+
191+
$incorrect = \Validator::make(
192+
['errado' => '116 5698 9194 0009'],
193+
['errado' => 'cns']
194+
);
195+
196+
$this->assertTrue($correct->passes());
197+
$this->assertTrue($incorrect->fails());
198+
199+
// Provisoria
200+
$correct = \Validator::make(
201+
['certo' => '892 1623 5477 0008'],
202+
['certo' => 'cns']
203+
);
204+
205+
$incorrect = \Validator::make(
206+
['errado' => '892 2641 5477 0008'],
207+
['errado' => 'cns']
208+
);
209+
210+
$this->assertTrue($correct->passes());
211+
$this->assertTrue($incorrect->fails());
212+
}
183213
}

0 commit comments

Comments
 (0)