TrCitizenNumberValidation   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 28
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
c 1
b 0
f 0
dl 0
loc 28
rs 10
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A validate() 0 24 5
1
<?php
2
3
namespace XAdam;
4
5
class TrCitizenNumberValidation
6
{
7
    protected static array $cache = [];
8
9
    public static function validate(int $citizen_number): bool
10
    {
11
        if (isset(static::$cache[$citizen_number])) {
12
            return static::$cache[$citizen_number];
13
        }
14
15
        if (!preg_match('/^[1-9]{1}[0-9]{9}[0,2,4,6,8]{1}$/', $citizen_number)) {
16
            return static::$cache[$citizen_number] = false;
17
        }
18
19
        $array = array_map(function ($value) {
20
            return intval($value);
21
        }, str_split($citizen_number));
22
23
        $oddNumber = $array[0] + $array[2] + $array[4] + $array[6] + $array[8];
24
        $evenNumber = $array[1] + $array[3] + $array[5] + $array[7];
25
        $digit10 = ($oddNumber * 7 - $evenNumber) % 10;
26
        $total = ($oddNumber + $evenNumber + $array[9]) % 10;
27
28
        if ($digit10 !== $array[9] || $total !== $array[10]) {
29
            return static::$cache[$citizen_number] = false;
30
        }
31
32
        return static::$cache[$citizen_number] = true;
33
    }
34
}
35