MyNumber::verifyCompany()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.2
c 0
b 0
f 0
cc 4
eloc 10
nc 4
nop 1
1
<?php namespace Serima\MyNumber;
2
3
class MyNumber
4
{
5
    /**
6
     * Check the number of digits.
7
     * Pass the number as string, if starting letter is beginning zero.
8
     *
9
     * @param integer|string $number
10
     * @param integer $digit
11
     * @return bool
12
     */
13
    public static function checkLength($number, $digit)
14
    {
15
        if (strlen($number) !== $digit || strspn($number, '1234567890') !== $digit) {
16
            return false;
17
        }
18
        return true;
19
    }
20
21
    /**
22
     * Verify personal MyNumber.
23
     * Pass the number as string, if starting letter is beginning zero.
24
     *
25
     * @param integer|string $number
26
     * @return bool
27
     * @link http://law.e-gov.go.jp/announce/H26F11001000085.html
28
     */
29
    public static function verifyPersonal($number)
30
    {
31
        if (false === self::checkLength($number, 12)) {
32
            return false;
33
        }
34
35
        $sum = 0;
36
        for ($i = 1; $i <= 11; $i++) {
37
            $m = (int)substr($number, 11 - $i, 1);
38
            $n = ($i <= 6) ? $i + 1 : $i - 5;
39
            $sum += $m * $n;
40
        }
41
        $mod = $sum % 11;
42
43
        if ($mod <= 1) {
44
            return ((int)substr($number, 11, 1) === 0);
45
        }
46
        return ((int)substr($number, 11, 1) === 11 - $mod);
47
    }
48
49
    /**
50
     * Verify company MyNumber.
51
     * Pass the number as string, if starting letter is beginning zero.
52
     *
53
     * @param integer|string $number
54
     * @return bool
55
     * @link http://law.e-gov.go.jp/announce/H26F14001000070.html
56
     */
57
    public static function verifyCompany($number)
58
    {
59
        if (false === self::checkLength($number, 13)) {
60
            return false;
61
        }
62
63
        $sum = 0;
64
        for ($i = 1; $i <= 12; $i++) {
65
            $m = (int)substr($number, 12 - $i, 1);
66
            $n = ($i % 2 === 0) ? 2 : 1;
67
            $sum += $m * $n;
68
        }
69
        $mod = $sum % 9;
70
71
        return ((int)substr($number, 12, 1) === 9 - $mod);
72
    }
73
}
74