CardNumber::rule()   A
last analyzed

Complexity

Conditions 5
Paths 6

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 5
eloc 9
c 1
b 0
f 1
nc 6
nop 4
dl 0
loc 14
rs 9.6111
1
<?php
2
3
namespace Iamfarhad\Validation\Rules;
4
5
use Iamfarhad\Validation\Contracts\AbstractValidationRule;
6
7
class CardNumber extends AbstractValidationRule
8
{
9
    /**
10
     * @var string
11
     */
12
    public $validationRule = 'card_number';
13
14
    /**
15
     * @param $attribute
16
     * @param $value
17
     * @param $parameters
18
     * @param $validator
19
     * @return bool
20
     */
21
    public function rule($attribute, $value, $parameters, $validator): bool
22
    {
23
        if (! preg_match('/^\d{16}$/', $value)) {
24
            return false;
25
        }
26
        $sum = 0;
27
        for ($position = 1; $position <= 16; $position++) {
28
            $temp = $value[$position - 1];
29
            $temp = $position % 2 === 0 ? $temp : $temp * 2;
30
            $temp = $temp > 9 ? $temp - 9 : $temp;
31
            $sum += $temp;
32
        }
33
34
        return (bool) ($sum % 10 === 0);
35
    }
36
}
37