-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathAbstractQRData.php
More file actions
85 lines (72 loc) · 2.15 KB
/
Copy pathAbstractQRData.php
File metadata and controls
85 lines (72 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
declare(strict_types=1);
namespace GlobusStudio\QRCode\Data;
use GlobusStudio\QRCode\Encoder\BitBuffer;
abstract class AbstractQRData implements QRDataInterface
{
public const MODE_NUMBER = 1;
public const MODE_ALPHA_NUM = 2;
public const MODE_8BIT_BYTE = 4;
public const MODE_KANJI = 8;
protected int $mode;
protected string $data;
public function __construct(int $mode, string $data)
{
$this->mode = $mode;
$this->data = $data;
}
public function getMode(): int
{
return $this->mode;
}
public function getData(): string
{
return $this->data;
}
public function getLength(): int
{
return strlen($this->data);
}
public function getLengthInBits(int $version): int
{
if ($version < 1 || $version > 40) {
throw new \InvalidArgumentException("Invalid version: $version");
}
if ($version <= 9) {
switch ($this->mode) {
case self::MODE_NUMBER:
return 10;
case self::MODE_ALPHA_NUM:
return 9;
case self::MODE_8BIT_BYTE:
return 8;
case self::MODE_KANJI:
return 8;
}
} elseif ($version <= 26) {
switch ($this->mode) {
case self::MODE_NUMBER:
return 12;
case self::MODE_ALPHA_NUM:
return 11;
case self::MODE_8BIT_BYTE:
return 16;
case self::MODE_KANJI:
return 10;
}
} else {
switch ($this->mode) {
case self::MODE_NUMBER:
return 14;
case self::MODE_ALPHA_NUM:
return 13;
case self::MODE_8BIT_BYTE:
return 16;
case self::MODE_KANJI:
return 12;
}
}
throw new \InvalidArgumentException("Invalid version: $version"); // @codeCoverageIgnore
}
abstract public function write(BitBuffer $buffer): void;
}