Completed
Pull Request — master (#38)
by Roberto
02:26
created

JudiciaryProcess::extractBaseNumber()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Brazanation\Documents;
4
5
/**
6
 * Formats and validates the numbers of legal proceedings
7
 * related to Judiciary assessments
8
 */
9
final class JudiciaryProcess extends AbstractDocument
10
{
11
    const LENGTH = 20;
12
13
    const LABEL = 'PROCESSO_JUDICIAL';
14
15
    const REGEX = '/^([\d]{7})([\d]{2})([\d]{4})([\d]{1})([\d]{2})([\d]{0,4})$/';
16
17 11
    public function __construct($number)
18
    {
19 11
        $number = preg_replace('/\D/', '', $number);
20 11
        parent::__construct($number, self::LENGTH, 2, self::LABEL);
21 4
    }
22
    
23 2
    public function format()
24
    {
25 2
        $number = str_pad($this->number, 20, '0', STR_PAD_RIGHT);
26 2
        return preg_replace(self::REGEX, '$1-$2.$3.$4.$5.$6', "{$number}");
27
    }
28
    
29 11
    protected function extractCheckerDigit($number)
30
    {
31 11
        return substr($number, 7, 2);
32
    }
33
    
34 8
    protected function extractBaseNumber($number)
35
    {
36 8
        return str_pad(substr($number, 0, 7).substr($number, 9, strlen($number)-1), 20, '0', STR_PAD_RIGHT);
37
    }
38
    
39
    /**
40
     * Calculate check digit Algoritm Module 97 Base 10 (ISO 7064)
41
     * Anexo VIII da Resolução CNJ no 65, de 16 de dezembro de 2008.
42
     * @param string $input
43
     * @return string
44
     */
45 8
    public function calculateDigit($input)
46
    {
47 8
        $n = (int) substr($input, 0, 7);
48 8
        $a = substr($input, 7, 4);
49 8
        $jtr = substr($input, 11, 3);
50 8
        $o = substr($input, 14, 6);
51 8
        $r1 = $n % 97;
52 8
        $v2 = str_pad("$r1", 2, '0', STR_PAD_LEFT)
53 8
            . str_pad($a, 4, '0', STR_PAD_LEFT)
54 8
            . str_pad($jtr, 3, '0', STR_PAD_LEFT);
55 8
        $r2 = $v2 % 97;
56 8
        $v3 = str_pad("$r2", 2, '0', STR_PAD_LEFT)
57 8
            . str_pad($o, 6, '0', STR_PAD_LEFT);
58 8
        $r3 = (float) $v3 % 97;
59 8
        $result = (string) (98 - $r3);
60 8
        return str_pad($result, 2, '0', STR_PAD_LEFT);
61
    }
62
}
63