Completed
Push — master ( 5f948f...7c7cea )
by Aleksandr
02:44 queued 01:09
created

Checksum::calculate()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 8
c 1
b 0
f 0
rs 9.4285
cc 2
eloc 5
nc 2
nop 2
1
<?php
2
3
4
namespace carono\checksum;
5
6
/**
7
 * Class Checksum
8
 *
9
 * @package app\helpers
10
 */
11
class Checksum
12
{
13
    /**
14
     * @param $array
15
     * @param null $salt
16
     * @return string
17
     */
18
    public static function calculate($array, $salt = null)
19
    {
20
        if ($key = static::formKey($array)) {
21
            return hash("sha256", $key . $salt);
22
        } else {
23
            return null;
24
        }
25
    }
26
27
    /**
28
     * @param $array
29
     * @param $hash
30
     * @param null $salt
31
     * @return bool
32
     */
33
    public static function validate($array, $hash, $salt = null)
34
    {
35
        $realHash = static::calculate($array, $salt);
36
        return $realHash == $hash;
37
    }
38
39
    /**
40
     * @param $array
41
     * @return array
42
     */
43
    public static function formKeyPartials($array)
44
    {
45
        $result = [];
46
        foreach ((array)$array as $model => $values) {
47
            if (is_array($values)) {
48
                foreach ($values as $key => $value) {
49
                    if (is_array($value)) {
50
                        foreach ($value as $subKey => $subValue) {
51
                            $result[] = join('=', [$model, is_numeric($key) ? $value : $key]);
52
                            break;
53
                        }
54
                    } else {
55
                        $result[] = join('=', [$model, is_numeric($key) ? $value : $key]);
56
                    }
57
                }
58
            }
59
        }
60
        $result = array_unique($result);
61
        sort($result);
62
        return $result;
63
    }
64
65
    /**
66
     * @param $array
67
     * @return string
68
     */
69
    public static function formKey($array)
70
    {
71
        $result = join('|', static::formKeyPartials($array));
72
        return $result;
73
    }
74
}