mirror of
https://github.com/Respect/Validation.git
synced 2024-06-08 08:42:15 +02:00
Apply contribution guidelines to "Cnh" rule
Co-Authored-By: Henrique Moody <henriquemoody@gmail.com>
This commit is contained in:
parent
8272f43207
commit
b507d928c1
|
@ -2,7 +2,7 @@
|
|||
|
||||
- `Cnh()`
|
||||
|
||||
Validates a Brazillian driver's license.
|
||||
Validates a Brazilian driver's license.
|
||||
|
||||
```php
|
||||
v::cnh()->validate('02650306461'); // true
|
||||
|
|
|
@ -13,8 +13,15 @@ declare(strict_types=1);
|
|||
|
||||
namespace Respect\Validation\Exceptions;
|
||||
|
||||
class CnhException extends ValidationException
|
||||
/**
|
||||
* @author Henrique Moody <henriquemoody@gmail.com>
|
||||
* @author Kinn Coelho Julião <kinncj@gmail.com>
|
||||
*/
|
||||
final class CnhException extends ValidationException
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $defaultTemplates = [
|
||||
self::MODE_DEFAULT => [
|
||||
self::STANDARD => '{{name}} must be a valid CNH number',
|
||||
|
|
|
@ -13,8 +13,23 @@ declare(strict_types=1);
|
|||
|
||||
namespace Respect\Validation\Rules;
|
||||
|
||||
class Cnh extends AbstractRule
|
||||
use function is_scalar;
|
||||
use function mb_strlen;
|
||||
use function preg_replace;
|
||||
|
||||
/**
|
||||
* Validates a Brazilian driver's license.
|
||||
*
|
||||
* @author Gabriel Pedro <gpedro@users.noreply.github.com>
|
||||
* @author Henrique Moody <henriquemoody@gmail.com>
|
||||
* @author Kinn Coelho Julião <kinncj@gmail.com>
|
||||
* @author William Espindola <oi@williamespindola.com.br>
|
||||
*/
|
||||
final class Cnh extends AbstractRule
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function validate($input): bool
|
||||
{
|
||||
if (!is_scalar($input)) {
|
||||
|
@ -25,14 +40,14 @@ class Cnh extends AbstractRule
|
|||
$input = preg_replace('{\D}', '', (string) $input);
|
||||
|
||||
// Validate length and invalid numbers
|
||||
if ((11 != mb_strlen($input)) || (0 == intval($input))) {
|
||||
if ((11 != mb_strlen($input)) || (0 === (int) $input)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Validate check digits using a modulus 11 algorithm
|
||||
for ($c = $s1 = $s2 = 0, $p = 9; $c < 9; $c++, $p--) {
|
||||
$s1 += intval($input[$c]) * $p;
|
||||
$s2 += intval($input[$c]) * (10 - $p);
|
||||
$s1 += (int) $input[$c] * $p;
|
||||
$s2 += (int) $input[$c] * (10 - $p);
|
||||
}
|
||||
|
||||
if ($input[9] != (($dv1 = $s1 % 11) > 9) ? 0 : $dv1) {
|
||||
|
|
37
tests/integration/rules/cnh.phpt
Normal file
37
tests/integration/rules/cnh.phpt
Normal file
|
@ -0,0 +1,37 @@
|
|||
--FILE--
|
||||
<?php
|
||||
require 'vendor/autoload.php';
|
||||
|
||||
use Respect\Validation\Exceptions\CnhException;
|
||||
use Respect\Validation\Exceptions\NestedValidationException;
|
||||
use Respect\Validation\Validator as v;
|
||||
|
||||
try {
|
||||
v::cnh()->check('batman');
|
||||
} catch (CnhException $e) {
|
||||
echo $e->getMessage().PHP_EOL;
|
||||
}
|
||||
|
||||
try {
|
||||
v::not(v::cnh())->check('02650306461');
|
||||
} catch (CnhException $e) {
|
||||
echo $e->getMessage().PHP_EOL;
|
||||
}
|
||||
|
||||
try {
|
||||
v::cnh()->assert('bruce wayne');
|
||||
} catch (NestedValidationException $e) {
|
||||
echo $e->getFullMessage().PHP_EOL;
|
||||
}
|
||||
|
||||
try {
|
||||
v::not(v::cnh())->assert('02650306461');
|
||||
} catch (NestedValidationException $e) {
|
||||
echo $e->getFullMessage().PHP_EOL;
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
"batman" must be a valid CNH number
|
||||
"02650306461" must not be a valid CNH number
|
||||
- "bruce wayne" must be a valid CNH number
|
||||
- "02650306461" must not be a valid CNH number
|
|
@ -13,182 +13,140 @@ declare(strict_types=1);
|
|||
|
||||
namespace Respect\Validation\Rules;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Respect\Validation\Test\RuleTestCase;
|
||||
|
||||
/**
|
||||
* @group rule
|
||||
* @group rule
|
||||
*
|
||||
* @covers \Respect\Validation\Rules\Cnh
|
||||
* @covers \Respect\Validation\Exceptions\CnhException
|
||||
*
|
||||
* @author Gabriel Caruso <carusogabriel34@gmail.com>
|
||||
* @author Gabriel Pedro <gpedro@users.noreply.github.com>
|
||||
* @author Henrique Moody <henriquemoody@gmail.com>
|
||||
* @author Kinn Coelho Julião <kinncj@gmail.com>
|
||||
* @author Pascal Borreli <pascal@borreli.com>
|
||||
* @author William Espindola <oi@williamespindola.com.br>
|
||||
*/
|
||||
class CnhTest extends TestCase
|
||||
final class CnhTest extends RuleTestCase
|
||||
{
|
||||
protected $cnhValidator;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->cnhValidator = new Cnh();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider validCnhProvider
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function testValidCnh($cnh): void
|
||||
public function providerForValidInput(): array
|
||||
{
|
||||
$this->cnhValidator->assert($cnh);
|
||||
self::assertTrue($this->cnhValidator->__invoke($cnh));
|
||||
$this->cnhValidator->check($cnh);
|
||||
}
|
||||
$rule = new Cnh();
|
||||
|
||||
/**
|
||||
* @dataProvider invalidCnhProvider
|
||||
* @expectedException \Respect\Validation\Exceptions\CnhException
|
||||
*/
|
||||
public function testInvalidCnh($cnh): void
|
||||
{
|
||||
$expectedInvalid = $this->cnhValidator->assert($cnh);
|
||||
self::assertFalse($expectedInvalid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider notIntegerCnhProvider
|
||||
* @expectedException \Respect\Validation\Exceptions\CnhException
|
||||
*/
|
||||
public function testNotIntegerCnh($cnh): void
|
||||
{
|
||||
$expectedInvalid = $this->cnhValidator->assert($cnh);
|
||||
self::assertFalse($expectedInvalid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider invalidCnhLengthProvider
|
||||
* @expectedException \Respect\Validation\Exceptions\CnhException
|
||||
*/
|
||||
public function testInvalidLengthCnh($cnh): void
|
||||
{
|
||||
$expectedInvalid = $this->cnhValidator->assert($cnh);
|
||||
self::assertFalse($expectedInvalid);
|
||||
}
|
||||
|
||||
public function validCnhProvider()
|
||||
{
|
||||
return [
|
||||
['02650306461'],
|
||||
['04397322870'],
|
||||
['04375701302'],
|
||||
['02996843266'],
|
||||
['04375700501'],
|
||||
['02605113410'],
|
||||
['03247061306'],
|
||||
['01258750259'],
|
||||
['00739751580'],
|
||||
['03375637504'],
|
||||
['02542551342'],
|
||||
['01708111400'],
|
||||
['00836510948'],
|
||||
['04365445978'],
|
||||
['04324384302'],
|
||||
['04339482949'],
|
||||
['01036520050'],
|
||||
['01612581027'],
|
||||
['00603454740'],
|
||||
['04129251992'],
|
||||
['03401740201'],
|
||||
['03417248301'],
|
||||
['00670431345'],
|
||||
['03292694405'],
|
||||
[$rule, '02650306461'],
|
||||
[$rule, '04397322870'],
|
||||
[$rule, '04375701302'],
|
||||
[$rule, '02996843266'],
|
||||
[$rule, '04375700501'],
|
||||
[$rule, '02605113410'],
|
||||
[$rule, '03247061306'],
|
||||
[$rule, '01258750259'],
|
||||
[$rule, '00739751580'],
|
||||
[$rule, '03375637504'],
|
||||
[$rule, '02542551342'],
|
||||
[$rule, '01708111400'],
|
||||
[$rule, '00836510948'],
|
||||
[$rule, '04365445978'],
|
||||
[$rule, '04324384302'],
|
||||
[$rule, '04339482949'],
|
||||
[$rule, '01036520050'],
|
||||
[$rule, '01612581027'],
|
||||
[$rule, '00603454740'],
|
||||
[$rule, '04129251992'],
|
||||
[$rule, '03401740201'],
|
||||
[$rule, '03417248301'],
|
||||
[$rule, '00670431345'],
|
||||
[$rule, '03292694405'],
|
||||
];
|
||||
}
|
||||
|
||||
public function invalidCnhProvider()
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function providerForInvalidInput(): array
|
||||
{
|
||||
return [
|
||||
[[]],
|
||||
[new \stdClass()],
|
||||
['0265131640'],
|
||||
['0439732280'],
|
||||
['0437571130'],
|
||||
['0299684320'],
|
||||
['0437571150'],
|
||||
['0261511340'],
|
||||
['0324716130'],
|
||||
['0125875120'],
|
||||
['0173975150'],
|
||||
['0337563750'],
|
||||
['0254255130'],
|
||||
['0171811140'],
|
||||
['0183651190'],
|
||||
['0436544590'],
|
||||
['0432438430'],
|
||||
['0433948290'],
|
||||
['0113652110'],
|
||||
['0161258110'],
|
||||
['0161345470'],
|
||||
['0412925190'],
|
||||
['0341174120'],
|
||||
['0341724830'],
|
||||
['0167143130'],
|
||||
['0329269440'],
|
||||
];
|
||||
}
|
||||
$rule = new Cnh();
|
||||
|
||||
public function notIntegerCnhProvider()
|
||||
{
|
||||
return [
|
||||
[''],
|
||||
['F265F3F6461'],
|
||||
['F439732287F'],
|
||||
['F43757F13F2'],
|
||||
['F2996843266'],
|
||||
['F43757FF5F1'],
|
||||
['F26F511341F'],
|
||||
['F3247F613F6'],
|
||||
['F125875F259'],
|
||||
['FF73975158F'],
|
||||
['F33756375F4'],
|
||||
['F2542551342'],
|
||||
['F17F81114FF'],
|
||||
['FF83651F948'],
|
||||
['F4365445978'],
|
||||
['F43243843F2'],
|
||||
['F4339482949'],
|
||||
['F1F3652FF5F'],
|
||||
['F1612581F27'],
|
||||
['FF6F345474F'],
|
||||
['F4129251992'],
|
||||
['F34F174F2F1'],
|
||||
['F34172483F1'],
|
||||
['FF67F431345'],
|
||||
['F32926944F5'],
|
||||
];
|
||||
}
|
||||
|
||||
public function invalidCnhLengthProvider()
|
||||
{
|
||||
return [
|
||||
['00265003006461'],
|
||||
['0043973228700'],
|
||||
['00437570013002'],
|
||||
['002996843266'],
|
||||
['004375700005001'],
|
||||
['00260051134100'],
|
||||
['00324700613006'],
|
||||
['0012587500259'],
|
||||
['00007397515800'],
|
||||
['0033756375004'],
|
||||
['002542551342'],
|
||||
['001700811140000'],
|
||||
['00008365100948'],
|
||||
['004365445978'],
|
||||
['0043243843002'],
|
||||
['004339482949'],
|
||||
['0010036520000500'],
|
||||
['0016125810027'],
|
||||
['000060034547400'],
|
||||
['004129251992'],
|
||||
['003400174002001'],
|
||||
['0034172483001'],
|
||||
['00006700431345'],
|
||||
['0032926944005'],
|
||||
[$rule, []],
|
||||
[$rule, new \stdClass()],
|
||||
[$rule, '0265131640'],
|
||||
[$rule, '0439732280'],
|
||||
[$rule, '0437571130'],
|
||||
[$rule, '0299684320'],
|
||||
[$rule, '0437571150'],
|
||||
[$rule, '0261511340'],
|
||||
[$rule, '0324716130'],
|
||||
[$rule, '0125875120'],
|
||||
[$rule, '0173975150'],
|
||||
[$rule, '0337563750'],
|
||||
[$rule, '0254255130'],
|
||||
[$rule, '0171811140'],
|
||||
[$rule, '0183651190'],
|
||||
[$rule, '0436544590'],
|
||||
[$rule, '0432438430'],
|
||||
[$rule, '0433948290'],
|
||||
[$rule, '0113652110'],
|
||||
[$rule, '0161258110'],
|
||||
[$rule, '0161345470'],
|
||||
[$rule, '0412925190'],
|
||||
[$rule, '0341174120'],
|
||||
[$rule, '0341724830'],
|
||||
[$rule, '0167143130'],
|
||||
[$rule, '0329269440'],
|
||||
[$rule, ''],
|
||||
[$rule, 'F265F3F6461'],
|
||||
[$rule, 'F439732287F'],
|
||||
[$rule, 'F43757F13F2'],
|
||||
[$rule, 'F2996843266'],
|
||||
[$rule, 'F43757FF5F1'],
|
||||
[$rule, 'F26F511341F'],
|
||||
[$rule, 'F3247F613F6'],
|
||||
[$rule, 'F125875F259'],
|
||||
[$rule, 'FF73975158F'],
|
||||
[$rule, 'F33756375F4'],
|
||||
[$rule, 'F2542551342'],
|
||||
[$rule, 'F17F81114FF'],
|
||||
[$rule, 'FF83651F948'],
|
||||
[$rule, 'F4365445978'],
|
||||
[$rule, 'F43243843F2'],
|
||||
[$rule, 'F4339482949'],
|
||||
[$rule, 'F1F3652FF5F'],
|
||||
[$rule, 'F1612581F27'],
|
||||
[$rule, 'FF6F345474F'],
|
||||
[$rule, 'F4129251992'],
|
||||
[$rule, 'F34F174F2F1'],
|
||||
[$rule, 'F34172483F1'],
|
||||
[$rule, 'FF67F431345'],
|
||||
[$rule, 'F32926944F5'],
|
||||
[$rule, '00265003006461'],
|
||||
[$rule, '0043973228700'],
|
||||
[$rule, '00437570013002'],
|
||||
[$rule, '002996843266'],
|
||||
[$rule, '004375700005001'],
|
||||
[$rule, '00260051134100'],
|
||||
[$rule, '00324700613006'],
|
||||
[$rule, '0012587500259'],
|
||||
[$rule, '00007397515800'],
|
||||
[$rule, '0033756375004'],
|
||||
[$rule, '002542551342'],
|
||||
[$rule, '001700811140000'],
|
||||
[$rule, '00008365100948'],
|
||||
[$rule, '004365445978'],
|
||||
[$rule, '0043243843002'],
|
||||
[$rule, '004339482949'],
|
||||
[$rule, '0010036520000500'],
|
||||
[$rule, '0016125810027'],
|
||||
[$rule, '000060034547400'],
|
||||
[$rule, '004129251992'],
|
||||
[$rule, '003400174002001'],
|
||||
[$rule, '0034172483001'],
|
||||
[$rule, '00006700431345'],
|
||||
[$rule, '0032926944005'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue