Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit02be1ae

Browse files
authored
Merge pull request#127 from omarkdev/fix/#122-recreate-renavam-validator
fix#122: Recreate Renavam rule
2 parents9fc6563 +fbe4b36 commit02be1ae

File tree

2 files changed

+111
-22
lines changed

2 files changed

+111
-22
lines changed

‎src/validator-docs/Rules/Renavam.php‎

Lines changed: 96 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,112 @@
66

77
class Renavamextends Sanitization
88
{
9+
/**
10+
* The renavam string size.
11+
*/
12+
protectedconstRENAVAM_SIZE =11;
13+
14+
/**
15+
* Validate the renavam.
16+
*
17+
* @param $attribute
18+
* @param $renavam
19+
* @return bool
20+
*/
921
publicfunctionvalidateRenavam($attribute,$renavam):bool
1022
{
1123
$renavam =$this->sanitize((string)$renavam);
12-
$renavamArray =str_split($renavam);
13-
$digit =$this->determinarDigito($renavamArray);
24+
if (!$this->renavamHasCorrectLength($renavam)) {
25+
returnfalse;
26+
}
27+
28+
$realLastDigit =$this->getRealLastDigit($renavam);
29+
$informedLastDigit = (int)substr($renavam,strlen($renavam) -1,strlen($renavam));
30+
31+
return$realLastDigit ===$informedLastDigit;
32+
}
33+
34+
35+
/**
36+
* Sanitize the renavam value.
37+
*
38+
* @param $value
39+
* @return string
40+
*/
41+
publicfunctionsanitize($value):string
42+
{
43+
$renavam =parent::sanitize((string)$value);
44+
if (preg_match("/^([0-9]{9})$/",$renavam)) {
45+
$renavam ='00' .$renavam;
46+
}
47+
48+
if (preg_match("/^([0-9]{10})$/",$renavam)) {
49+
$renavam ='0' .$renavam;
50+
}
51+
52+
return$renavam;
53+
}
54+
55+
/**
56+
* Check if renavam has correct length.
57+
*
58+
* @param string $renavam
59+
* @return bool
60+
*/
61+
protectedfunctionrenavamHasCorrectLength(string$renavam):bool
62+
{
63+
return !!preg_match("/[0-9]{11}/",$renavam);
64+
}
65+
66+
/**
67+
* Get the real last digit calculated.
68+
*
69+
* @param string $renavam
70+
* @return int
71+
*/
72+
privatefunctiongetRealLastDigit(string$renavam):int
73+
{
74+
$renavamReverseWithoutDigit =$this->sanitizeToReverseWithoutDigit($renavam);
75+
$sum =$this->calcSumByRenavamReverseWithoutDigit($renavamReverseWithoutDigit);
76+
77+
$mod11 =$sum %self::RENAVAM_SIZE;
78+
$lastDigitCalculated =self::RENAVAM_SIZE -$mod11;
79+
80+
return$lastDigitCalculated >=10 ?0 :$lastDigitCalculated;
81+
}
82+
83+
/**
84+
* Sanitize the renavam to without digit.
85+
*
86+
* @param string $renavam
87+
* @return string
88+
*/
89+
protectedfunctionsanitizeToReverseWithoutDigit(string$renavam):string
90+
{
91+
$renavamWithoutDigit =substr($renavam,0,10);
1492

15-
return$digit === (int)$renavamArray[4];
93+
returnstrrev($renavamWithoutDigit);
1694
}
1795

18-
publicfunctiondeterminarDigito($renavam):int
96+
/**
97+
* Calculate the sum value by renavam reverse without digit.
98+
*
99+
* @param string $renavamReverseWithoutDigit
100+
* @return int
101+
*/
102+
protectedfunctioncalcSumByRenavamReverseWithoutDigit(string$renavamReverseWithoutDigit):int
19103
{
20-
$resultante =0;
21-
$contador =0;
104+
$sum =0;
22105

23-
for ($indice =5;$indice >=2;$indice--) {
24-
$resultante +=$renavam[$contador] *$indice;
25-
$contador++;
106+
for ($i =0;$i <8;$i++) {
107+
$numeral = (int)substr($renavamReverseWithoutDigit,$i,1);
108+
$multiplier =$i +2;
109+
$sum +=$numeral *$multiplier;
26110
}
27111

28-
$verificador =$resultante %11;
112+
$sum +=$renavamReverseWithoutDigit[8] *2;
113+
$sum +=$renavamReverseWithoutDigit[9] *3;
29114

30-
return$verificador >=10 ?0 :$verificador;
115+
return$sum;
31116
}
32117
}

‎tests/Rules/RenavamTest.php‎

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,24 @@ public function renavamValido($renavam, $esperado): void
1818

1919
$atual =$instance->validateRenavam('',$renavam);
2020

21-
$this->assertSame($esperado,$atual);
21+
$this->assertSame($esperado,$atual,$renavam);
2222
}
2323

2424
publicfunctionrenavamProvider():array
2525
{
26-
return [
27-
'Input correto' => [
28-
'renavam' =>639884962,
29-
'esperado' =>true,
30-
],
31-
'Input incorreto' => [
32-
'renavam' =>11111111111,
33-
'esperado' =>false
34-
],
35-
];
26+
$correctValues = [32094074362,23478829239,34145742746,41833820181,639884962];
27+
$wrongValues = [11111111111,32094074212,62128843267];
28+
29+
returnarray_reduce(
30+
array_merge($correctValues,$wrongValues),
31+
function ($acc,$value)use ($correctValues) {
32+
$key ="Renavam" .$value;
33+
$testProperties = ['renavam' =>$value,'esperado' =>in_array($value,$correctValues)];
34+
35+
$acc[$key] =$testProperties;
36+
return$acc;
37+
},
38+
[]
39+
);
3640
}
3741
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp