Skip to content

Commit 87c6fb8

Browse files
authored
Merge pull request #44 from geekcom/develop
melhoria na validacao de CNH,strict_types PHP ativado
2 parents 60ca14e + 13cbeb9 commit 87c6fb8

File tree

3 files changed

+95
-92
lines changed

3 files changed

+95
-92
lines changed

src/validator-docs/Validator.php

Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace geekcom\ValidatorDocs;
46

57
use Illuminate\Validation\Validator as BaseValidator;
68

79
use function preg_match;
810
use function preg_replace;
9-
use function strlen;
11+
use function mb_strlen;
1012
use function str_repeat;
1113
use function sprintf;
1214
use function substr;
@@ -18,39 +20,36 @@
1820
*/
1921
class Validator extends BaseValidator
2022
{
21-
protected function validateFormatoCpf($attribute, $value)
23+
protected function validateFormatoCpf($attribute, $value): bool
2224
{
2325
return preg_match('/^\d{3}\.\d{3}\.\d{3}-\d{2}$/', $value) > 0;
2426
}
2527

26-
protected function validateFormatoCnpj($attribute, $value)
28+
protected function validateFormatoCnpj($attribute, $value): bool
2729
{
2830
return preg_match('/^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/', $value) > 0;
2931
}
3032

31-
protected function validateFormatoCpfCnpj($attribute, $value)
33+
protected function validateFormatoCpfCnpj($attribute, $value): bool
3234
{
3335
return $this->validateFormatoCpf($attribute, $value) || $this->validateFormatoCnpj($attribute, $value);
3436
}
3537

36-
protected function validateFormatoNis($attribute, $value)
38+
protected function validateFormatoNis($attribute, $value): bool
3739
{
3840
return preg_match('/^\d{3}\.\d{5}\.\d{2}-\d{1}$/', $value) > 0;
3941
}
4042

41-
/*
42-
* O Número de Matrícula tem a configuração aaaaaa.bb.cc.dddd.e.fffff.ggg.hhhhhhh-ii
43-
*/
44-
protected function validateFormatoCertidao($attribute, $value)
43+
protected function validateFormatoCertidao($attribute, $value): bool
4544
{
4645
return preg_match('/^\d{6}[. ]\d{2}[. ]\d{2}[. ]\d{4}[. ]\d{1}[. ]\d{5}[. ]\d{3}[. ]\d{7}[- ]\d{2}$/', $value) > 0;
4746
}
4847

49-
protected function validateCpf($attribute, $value)
48+
protected function validateCpf($attribute, $value): bool
5049
{
51-
$c = preg_replace('/\D/', '', $value);
50+
$c = $this->removeCaracteresNaoNumericos($value);
5251

53-
if (strlen($c) != 11 || preg_match("/^{$c[0]}{11}$/", $c)) {
52+
if (mb_strlen($c) != 11 || preg_match("/^{$c[0]}{11}$/", $c)) {
5453
return false;
5554
}
5655

@@ -69,11 +68,11 @@ protected function validateCpf($attribute, $value)
6968
return true;
7069
}
7170

72-
protected function validateCnpj($attribute, $value)
71+
protected function validateCnpj($attribute, $value): bool
7372
{
74-
$c = preg_replace('/\D/', '', $value);
73+
$c = $this->removeCaracteresNaoNumericos($value);
7574

76-
if (strlen($c) != 14 || preg_match("/^{$c[0]}{14}$/", $c)) {
75+
if (mb_strlen($c) != 14 || preg_match("/^{$c[0]}{14}$/", $c)) {
7776
return false;
7877
}
7978

@@ -94,52 +93,51 @@ protected function validateCnpj($attribute, $value)
9493
return true;
9594
}
9695

97-
protected function validateCpfCnpj($attribute, $value)
96+
protected function validateCpfCnpj($attribute, $value): bool
9897
{
9998
return ($this->validateCpf($attribute, $value) || $this->validateCnpj($attribute, $value));
10099
}
101100

102101
/**
103102
* Trecho retirado do respect validation
104103
*/
105-
protected function validateCnh($attribute, $value)
104+
protected function validateCnh($attribute, $value): bool
106105
{
107-
$ret = false;
106+
if (!is_scalar($value)) {
107+
return false;
108+
}
108109

109-
if ((strlen($input = preg_replace('/[^\d]/', '', $value)) == 11)
110-
&& (str_repeat($input[1], 11) != $input)
111-
) {
112-
$dsc = 0;
110+
$value = $this->removeCaracteresNaoNumericos($value);
113111

114-
for ($i = 0, $j = 9, $v = 0; $i < 9; ++$i, --$j) {
115-
$v += (int) $input[$i] * $j;
116-
}
112+
if (mb_strlen($value) != 11 || ((int) $value === 0)) {
113+
return false;
114+
}
117115

118-
if (($vl1 = $v % 11) >= 10) {
119-
$vl1 = 0;
120-
$dsc = 2;
121-
}
116+
for ($c = $s1 = $s2 = 0, $p = 9; $c < 9; $c++, $p--) {
117+
$s1 += (int) $value[$c] * $p;
118+
$s2 += (int) $value[$c] * (10 - $p);
119+
}
122120

123-
for ($i = 0, $j = 1, $v = 0; $i < 9; ++$i, ++$j) {
124-
$v += (int) $input[$i] * $j;
125-
}
121+
$dv1 = $s1 % 11;
122+
if ($value[9] != ($dv1 > 9) ? 0 : $dv1) {
123+
return false;
124+
}
126125

127-
$vl2 = ($x = ($v % 11)) >= 10 ? 0 : $x - $dsc;
126+
$dv2 = $s2 % 11 - ($dv1 > 9 ? 2 : 0);
128127

129-
$ret = sprintf('%d%d', $vl1, $vl2) == substr($input, -2);
130-
}
128+
$check = $dv2 < 0 ? $dv2 + 11 : $dv2 > 9 ? 0 : $dv2;
131129

132-
return $ret;
130+
return $value[10] == $check;
133131
}
134132

135-
protected function validateTituloEleitor($attribute, $value)
133+
protected function validateTituloEleitor($attribute, $value): bool
136134
{
137-
$input = preg_replace('/[^\d]/', '', $value);
135+
$input = $this->removeCaracteresNaoNumericos($value);
138136

139137
$uf = substr($input, -4, 2);
140138

141-
if (((strlen($input) < 5) || (strlen($input) > 13)) ||
142-
(str_repeat($input[1], strlen($input)) == $input) ||
139+
if (((mb_strlen($input) < 5) || (mb_strlen($input) > 13)) ||
140+
(str_repeat($input[1], mb_strlen($input)) == $input) ||
143141
($uf < 1 || $uf > 28)) {
144142
return false;
145143
}
@@ -153,7 +151,7 @@ protected function validateTituloEleitor($attribute, $value)
153151
$fator = 9;
154152
$soma = 0;
155153

156-
for ($j = (strlen($sequencia) - 1); $j > -1; $j--) {
154+
for ($j = (mb_strlen($sequencia) - 1); $j > -1; $j--) {
157155
$soma += $sequencia[$j] * $fator;
158156

159157
if ($fator == $base) {
@@ -185,11 +183,11 @@ protected function validateTituloEleitor($attribute, $value)
185183
return true;
186184
}
187185

188-
protected function validateNis($attribute, $value)
186+
protected function validateNis($attribute, $value): bool
189187
{
190-
$nis = sprintf('%011s', preg_replace('{\D}', '', $value));
188+
$nis = sprintf('%011s', $this->removeCaracteresNaoNumericos($value));
191189

192-
if (strlen($nis) != 11 || preg_match("/^{$nis[0]}{11}$/", $nis)) {
190+
if (mb_strlen($nis) != 11 || preg_match("/^{$nis[0]}{11}$/", $nis)) {
193191
return false;
194192
}
195193

@@ -200,9 +198,9 @@ protected function validateNis($attribute, $value)
200198
return ($nis[10] == (((10 * $d) % 11) % 10));
201199
}
202200

203-
protected function validateCns($attribute, $value)
201+
protected function validateCns($attribute, $value): bool
204202
{
205-
$cns = preg_replace('/[^\d]/', '', $value);
203+
$cns = $this->removeCaracteresNaoNumericos($value);
206204

207205
// CNSs definitivos começam em 1 ou 2 / CNSs provisórios em 7, 8 ou 9
208206
if (preg_match("/[1-2][0-9]{10}00[0-1][0-9]/", $cns) || preg_match("/[7-9][0-9]{14}/", $cns)) {
@@ -212,27 +210,26 @@ protected function validateCns($attribute, $value)
212210
return false;
213211
}
214212

215-
private function somaPonderadaCns($value)
213+
private function somaPonderadaCns($value): int
216214
{
217215
$soma = 0;
218216

219-
for ($i = 0; $i < strlen($value); $i++) {
217+
for ($i = 0; $i < mb_strlen($value); $i++) {
220218
$soma += $value[$i] * (15 - $i);
221219
}
222220

223221
return $soma;
224222
}
225-
223+
226224
/*
227225
* CERTIDÃO DE NASCIMENTO/CASAMENTO/ÓBITO
228226
* Fonte: http://ghiorzi.org/DVnew.htm#zc
229227
*
230228
* Nota: se o resto for "10", o DV será "1"
231229
*/
232-
protected function validateCertidao($attribute, $value)
230+
protected function validateCertidao($attribute, $value): bool
233231
{
234-
// Remove não numericos
235-
$certidao = preg_replace('/[^\d]/', '', $value);
232+
$certidao = $this->removeCaracteresNaoNumericos($value);
236233

237234
if (!preg_match("/[0-9]{32}/", $certidao)) {
238235
return false;
@@ -249,16 +246,19 @@ protected function validateCertidao($attribute, $value)
249246
// Compara o dv recebido com os dois numeros calculados
250247
if ($dv === $dv1.$dv2) {
251248
return true;
252-
} else {
253-
return false;
254249
}
250+
251+
return false;
255252
}
256253

257-
private function somaPonderadaCertidao($value) {
254+
private function somaPonderadaCertidao($value): int
255+
{
258256
$soma = 0;
259257

260-
$multiplicador = 32 - strlen($value);
261-
for ($i = 0; $i < strlen($value); $i++) {
258+
$multiplicador = 32 - mb_strlen($value);
259+
260+
for ($i = 0; $i < mb_strlen($value); $i++) {
261+
262262
$soma += $value[$i] * $multiplicador;
263263

264264
$multiplicador += 1;
@@ -267,4 +267,9 @@ private function somaPonderadaCertidao($value) {
267267

268268
return $soma;
269269
}
270+
271+
private function removeCaracteresNaoNumericos($value): string
272+
{
273+
return preg_replace('/[^\d]/', '', $value);
274+
}
270275
}

src/validator-docs/ValidatorProvider.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,18 @@
66

77
class ValidatorProvider extends ServiceProvider
88
{
9-
109
/**
1110
* Indicates if loading of the provider is deferred.
1211
*
1312
* @var bool
1413
*/
1514
protected $defer = false;
1615

17-
1816
/**
1917
* Bootstrap the application events.
2018
*
2119
* @return void
2220
*/
23-
2421
public function boot()
2522
{
2623
$me = $this;
@@ -32,7 +29,6 @@ public function boot()
3229
});
3330
}
3431

35-
3632
protected function getMessages()
3733
{
3834
return [
@@ -70,4 +66,4 @@ public function provides()
7066
{
7167
return [];
7268
}
73-
}
69+
}

0 commit comments

Comments
 (0)