Barcode1DAnalysis   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 77.42%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 0
dl 0
loc 69
ccs 24
cts 31
cp 0.7742
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
B validate() 0 39 11
1
<?php
2
3
namespace Posprint\Printers\Barcodes;
4
5
class Barcode1DAnalysis
6
{
7
    protected static $barcode1D = [
8
        'EAN13' => ['len' => '12', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
9
        'EAN8' => ['len' => '7',  'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
10
        'S25' => ['len' => '1-255', 'oddeven' => 'even', 'code' => '', 'regex' => '/[^0-9]/'],
11
        'I25' => ['len' => '1-255', 'oddeven' => 'even', 'code' => '', 'regex' => '/[^0-9]/'],
12
        'CODE128' => ['len' => '2-255', 'oddeven' => '', 'code' => 'ASCII', 'regex' => ''],
13
        'CODE39' => ['len' => '1-255', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9A-Z-,.%\/$ +]/'],
14
        'CODE93' => ['len' => '1-255', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9A-Z-,.%\/$ +]/'],
15
        'UPC_A' => ['len' => '11', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
16
        'UPC-E' => ['len' => '12', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
17
        'CODABAR' => ['len' => '1-255', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9$-:\/.+/'],
18
        'MSI' => ['len' => '1-20', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
19
        'CODE11' => ['len' => '1-20', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
20
        'GS1128' => ['len' => '2-255', 'oddeven' => '', 'code' => 'ASCII', 'regex' => ''],
21
        'GS1DATABAROMINI' => ['len' => '13', 'code' => '', 'oddeven' => '', 'regex' => '/[^0-9]/'],
22
        'GS1DATABARTRUNC' => ['len' => '13', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
23
        'GS1DATABARLIMIT' => ['len' => '13', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9]/'],
24
        'GS1DATABAREXPAN' => ['len' => '2-41', 'oddeven' => '', 'code' => '', 'regex' => '/[^0-9A-Za-z]/']
25
    ];
26
    
27
    /**
28
     * Adjust data to barcode parameters
29
     *
30
     * @param string $data barcode data
31
     * @param string $type type of barcode
32
     * @return string|boolean
33
     */
34 1
    public static function validate($data, $type)
35
    {
36 1
        if (!array_key_exists($type, self::$barcode1D)) {
37
            return false;
38
        }
39 1
        $bcSpks = self::$barcode1D[$type];
40 1
        $len = $bcSpks['len'];
41 1
        $oddeven = $bcSpks['oddeven'];
42 1
        $regex = $bcSpks['regex'];
43 1
        $code = $bcSpks['code'];
44
        //apply rules over barcode data
45 1
        if ($code == 'ASCII') {
46 1
            $data = iconv('utf-8', 'us-ascii//TRANSLIT', $data);
47 1
        }
48 1
        if ($regex != '') {
49
            $data = preg_replace($regex, '', $data);
50
        }
51 1
        $data = trim($data);
52 1
        if (empty($data)) {
53
            return false;
54
        }
55 1
        $dlen = strlen($data);
56 1
        if (($oddeven == 'even' && $dlen % 2 != 0)
57 1
            || ($oddeven == 'odd' && $dlen % 2 == 0)
58 1
        ) {
59
            return false;
60
        }
61 1
        $al = explode('-', $len);
62 1
        if (count($al) > 1) {
63 1
            if ($dlen < $al[0]) {
64
                return false;
65
            }
66 1
            $alen = $al[1];
67 1
        } else {
68
            $alen = $al[0];
69
        }
70 1
        $data = substr($data, 0, $alen);
71 1
        return $data;
72
    }
73
}
74