Skip to content

Commit 7b053ad

Browse files
authored
Merge pull request #159 from Bernhard-Krop/code-93
Solution for Issue: Invalid XML when using SVG generator for type Code 93
2 parents afbbebf + bd730cf commit 7b053ad

File tree

3 files changed

+127
-125
lines changed

3 files changed

+127
-125
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
vendor
22
composer.lock
33
composer.phar
4-
.phpunit.result.cache
4+
.phpunit.result.cache
5+
.DS_Store

src/Types/TypeCode93.php

+95-103
Original file line numberDiff line numberDiff line change
@@ -59,66 +59,64 @@ class TypeCode93 implements TypeInterface
5959
47 => '112131', // /
6060
43 => '113121', // +
6161
37 => '211131', // %
62-
128 => '121221', // ($)
63-
129 => '311121', // (/)
64-
130 => '122211', // (+)
65-
131 => '312111', // (%)
62+
97 => '121221', // ($)
63+
98 => '312111', // (%)
64+
99 => '311121', // (/)
65+
100 => '122211', // (+)
6666
42 => '111141', // start-stop
6767
];
6868

6969
public function getBarcodeData(string $code): Barcode
7070
{
71-
$code = strtoupper($code);
72-
7371
$encode = [
74-
chr(0) => chr(131) . 'U',
75-
chr(1) => chr(128) . 'A',
76-
chr(2) => chr(128) . 'B',
77-
chr(3) => chr(128) . 'C',
78-
chr(4) => chr(128) . 'D',
79-
chr(5) => chr(128) . 'E',
80-
chr(6) => chr(128) . 'F',
81-
chr(7) => chr(128) . 'G',
82-
chr(8) => chr(128) . 'H',
83-
chr(9) => chr(128) . 'I',
84-
chr(10) => chr(128) . 'J',
85-
chr(11) => '£K',
86-
chr(12) => chr(128) . 'L',
87-
chr(13) => chr(128) . 'M',
88-
chr(14) => chr(128) . 'N',
89-
chr(15) => chr(128) . 'O',
90-
chr(16) => chr(128) . 'P',
91-
chr(17) => chr(128) . 'Q',
92-
chr(18) => chr(128) . 'R',
93-
chr(19) => chr(128) . 'S',
94-
chr(20) => chr(128) . 'T',
95-
chr(21) => chr(128) . 'U',
96-
chr(22) => chr(128) . 'V',
97-
chr(23) => chr(128) . 'W',
98-
chr(24) => chr(128) . 'X',
99-
chr(25) => chr(128) . 'Y',
100-
chr(26) => chr(128) . 'Z',
101-
chr(27) => chr(131) . 'A',
102-
chr(28) => chr(131) . 'B',
103-
chr(29) => chr(131) . 'C',
104-
chr(30) => chr(131) . 'D',
105-
chr(31) => chr(131) . 'E',
72+
chr(0) => 'bU',
73+
chr(1) => 'aA',
74+
chr(2) => 'aB',
75+
chr(3) => 'aC',
76+
chr(4) => 'aD',
77+
chr(5) => 'aE',
78+
chr(6) => 'aF',
79+
chr(7) => 'aG',
80+
chr(8) => 'aH',
81+
chr(9) => 'aI',
82+
chr(10) => 'aJ',
83+
chr(11) => 'aK',
84+
chr(12) => 'aL',
85+
chr(13) => 'aM',
86+
chr(14) => 'aN',
87+
chr(15) => 'aO',
88+
chr(16) => 'aP',
89+
chr(17) => 'aQ',
90+
chr(18) => 'aR',
91+
chr(19) => 'aS',
92+
chr(20) => 'aT',
93+
chr(21) => 'aU',
94+
chr(22) => 'aV',
95+
chr(23) => 'aW',
96+
chr(24) => 'aX',
97+
chr(25) => 'aY',
98+
chr(26) => 'aZ',
99+
chr(27) => 'bA',
100+
chr(28) => 'bB',
101+
chr(29) => 'bC',
102+
chr(30) => 'bD',
103+
chr(31) => 'bE',
106104
chr(32) => ' ',
107-
chr(33) => chr(129) . 'A',
108-
chr(34) => chr(129) . 'B',
109-
chr(35) => chr(129) . 'C',
110-
chr(36) => chr(36), // "$"
111-
chr(37) => chr(37), // "%"
112-
chr(38) => chr(129) . 'F',
113-
chr(39) => chr(129) . 'G',
114-
chr(40) => chr(129) . 'H',
115-
chr(41) => chr(129) . 'I',
116-
chr(42) => chr(129) . 'J',
117-
chr(43) => chr(43), // "+"
118-
chr(44) => chr(129) . 'L',
105+
chr(33) => 'cA',
106+
chr(34) => 'cB',
107+
chr(35) => 'cC',
108+
chr(36) => '$',
109+
chr(37) => '%',
110+
chr(38) => 'cF',
111+
chr(39) => 'cG',
112+
chr(40) => 'cH',
113+
chr(41) => 'cI',
114+
chr(42) => 'cJ',
115+
chr(43) => '+',
116+
chr(44) => 'cL',
119117
chr(45) => '-',
120118
chr(46) => '.',
121-
chr(47) => chr(47), // "/"
119+
chr(47) => '/',
122120
chr(48) => '0',
123121
chr(49) => '1',
124122
chr(50) => '2',
@@ -129,13 +127,13 @@ public function getBarcodeData(string $code): Barcode
129127
chr(55) => '7',
130128
chr(56) => '8',
131129
chr(57) => '9',
132-
chr(58) => chr(129) . 'Z',
133-
chr(59) => chr(131) . 'F',
134-
chr(60) => chr(131) . 'G',
135-
chr(61) => chr(131) . 'H',
136-
chr(62) => chr(131) . 'I',
137-
chr(63) => chr(131) . 'J',
138-
chr(64) => chr(131) . 'V',
130+
chr(58) => 'cZ',
131+
chr(59) => 'bF',
132+
chr(60) => 'bG',
133+
chr(61) => 'bH',
134+
chr(62) => 'bI',
135+
chr(63) => 'bJ',
136+
chr(64) => 'bV',
139137
chr(65) => 'A',
140138
chr(66) => 'B',
141139
chr(67) => 'C',
@@ -162,43 +160,43 @@ public function getBarcodeData(string $code): Barcode
162160
chr(88) => 'X',
163161
chr(89) => 'Y',
164162
chr(90) => 'Z',
165-
chr(91) => chr(131) . 'K',
166-
chr(92) => chr(131) . 'L',
167-
chr(93) => chr(131) . 'M',
168-
chr(94) => chr(131) . 'N',
169-
chr(95) => chr(131) . 'O',
170-
chr(96) => chr(131) . 'W',
171-
chr(97) => chr(130) . 'A',
172-
chr(98) => chr(130) . 'B',
173-
chr(99) => chr(130) . 'C',
174-
chr(100) => chr(130) . 'D',
175-
chr(101) => chr(130) . 'E',
176-
chr(102) => chr(130) . 'F',
177-
chr(103) => chr(130) . 'G',
178-
chr(104) => chr(130) . 'H',
179-
chr(105) => chr(130) . 'I',
180-
chr(106) => chr(130) . 'J',
181-
chr(107) => chr(130) . 'K',
182-
chr(108) => chr(130) . 'L',
183-
chr(109) => chr(130) . 'M',
184-
chr(110) => chr(130) . 'N',
185-
chr(111) => chr(130) . 'O',
186-
chr(112) => chr(130) . 'P',
187-
chr(113) => chr(130) . 'Q',
188-
chr(114) => chr(130) . 'R',
189-
chr(115) => chr(130) . 'S',
190-
chr(116) => chr(130) . 'T',
191-
chr(117) => chr(130) . 'U',
192-
chr(118) => chr(130) . 'V',
193-
chr(119) => chr(130) . 'W',
194-
chr(120) => chr(130) . 'X',
195-
chr(121) => chr(130) . 'Y',
196-
chr(122) => chr(130) . 'Z',
197-
chr(123) => chr(131) . 'P',
198-
chr(124) => chr(131) . 'Q',
199-
chr(125) => chr(131) . 'R',
200-
chr(126) => chr(131) . 'S',
201-
chr(127) => chr(131) . 'T',
163+
chr(91) => 'bK',
164+
chr(92) => 'bL',
165+
chr(93) => 'bM',
166+
chr(94) => 'bN',
167+
chr(95) => 'bO',
168+
chr(96) => 'bW',
169+
chr(97) => 'dA',
170+
chr(98) => 'dB',
171+
chr(99) => 'dC',
172+
chr(100) => 'dD',
173+
chr(101) => 'dE',
174+
chr(102) => 'dF',
175+
chr(103) => 'dG',
176+
chr(104) => 'dH',
177+
chr(105) => 'dI',
178+
chr(106) => 'dJ',
179+
chr(107) => 'dK',
180+
chr(108) => 'dL',
181+
chr(109) => 'dM',
182+
chr(110) => 'dN',
183+
chr(111) => 'dO',
184+
chr(112) => 'dP',
185+
chr(113) => 'dQ',
186+
chr(114) => 'dR',
187+
chr(115) => 'dS',
188+
chr(116) => 'dT',
189+
chr(117) => 'dU',
190+
chr(118) => 'dV',
191+
chr(119) => 'dW',
192+
chr(120) => 'dX',
193+
chr(121) => 'dY',
194+
chr(122) => 'dZ',
195+
chr(123) => 'bP',
196+
chr(124) => 'bQ',
197+
chr(125) => 'bR',
198+
chr(126) => 'bS',
199+
chr(127) => 'bT',
202200
];
203201

204202
$code_ext = '';
@@ -250,13 +248,10 @@ public function getBarcodeData(string $code): Barcode
250248
*/
251249
protected function checksum_code93($code)
252250
{
253-
$chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%', '<', '=', '>', '?'];
254-
255-
// translate special characters
256-
$code = strtr($code, chr(128) . chr(131) . chr(129) . chr(130), '<=>?');
257-
$len = strlen($code);
251+
$chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%', 'a', 'b', 'c', 'd'];
258252

259253
// calculate check digit C
254+
$len = strlen($code);
260255
$p = 1;
261256
$check = 0;
262257
for ($i = ($len - 1); $i >= 0; --$i) {
@@ -287,9 +282,6 @@ protected function checksum_code93($code)
287282

288283
$checksum = $c . $k;
289284

290-
// resto respecial characters
291-
$checksum = strtr($checksum, '<=>?', chr(128) . chr(131) . chr(129) . chr(130));
292-
293285
return $checksum;
294286
}
295287
}

tests/verified-files/C93-1234567890abcABC.svg

+30-21
Loading

0 commit comments

Comments
 (0)