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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
<?php /** * BCGcodabar.barcode.php *-------------------------------------------------------------------- * * Sub-Class - Codabar * *-------------------------------------------------------------------- * Revision History * v2.0.0 23 apr 2008 Jean-Sébastien Goupil New Version Update + fix B and C * v1.2.3b 31 dec 2005 Jean-Sébastien Goupil PHP5.1 compatible * v1.2.1 27 jun 2005 Jean-Sébastien Goupil Font support added * V1.00 17 jun 2004 Jean-Sebastien Goupil *-------------------------------------------------------------------- * $Id: BCGcodabar.barcode.php,v 1.11 2009/11/09 04:08:41 jsgoupil Exp $ *-------------------------------------------------------------------- * Copyright (C) Jean-Sebastien Goupil * http://www.barcodephp.com */ include_once('BCGBarcode1D.php');
class BCGcodabar extends BCGBarcode1D { /** * Constructor */ public function __construct() { parent::__construct();
$this->keys = array('0','1','2','3','4','5','6','7','8','9','-','$',':','/','.','+','A','B','C','D'); $this->code = array( // 0 added to add an extra space '00000110', /* 0 */ '00001100', /* 1 */ '00010010', /* 2 */ '11000000', /* 3 */ '00100100', /* 4 */ '10000100', /* 5 */ '01000010', /* 6 */ '01001000', /* 7 */ '01100000', /* 8 */ '10010000', /* 9 */ '00011000', /* - */ '00110000', /* $ */ '10001010', /* : */ '10100010', /* / */ '10101000', /* . */ '00111110', /* + */ '00110100', /* A */ '01010010', /* B */ '00010110', /* C */ '00011100' /* D */ ); }
/** * Saves Text * * @param string $text */ public function parse($text) { parent::parse(strtoupper($text)); // Only Capital Letters are Allowed }
/** * Draws the barcode * * @param resource $im */ public function draw(&$im) { $error_stop = false;
// Checking if all chars are allowed $c = strlen($this->text); for($i = 0; $i < $c; $i++) { if(array_search($this->text[$i], $this->keys) === false) { $this->drawError($im, 'Char \'' . $this->text[$i] . '\' not allowed.'); $error_stop = true; } } if($error_stop === false) { // Must start by A, B, C or D if($this->text[0] !== 'A' && $this->text[0] !== 'B' && $this->text[0] !== 'C' && $this->text[0] !== 'D') { $this->drawError($im, 'Must start by char A, B, C or D.'); $error_stop = true; } // Must over by A, B, C or D $c2 = $c - 1; if($c2 === 0 || ($this->text[$c2] !== 'A' && $this->text[$c2] !== 'B' && $this->text[$c2] !== 'C' && $this->text[$c2] !== 'D')) { $this->drawError($im, 'Must end by char A, B, C or D.'); $error_stop = true; } if($error_stop === false) { for($i = 0; $i < $c; $i++) { $this->drawChar($im, $this->findCode($this->text[$i]), true); } $this->drawText($im); } } }
/** * Returns the maximal size of a barcode * * @return int[] */ public function getMaxSize() { $p = parent::getMaxSize();
$w = 0; $c = strlen($this->text); for($i = 0; $i < $c; $i++) { $index = $this->findIndex($this->text[$i]); if($index !== false) { $w += 8; $w += substr_count($this->code[$index], '1'); } } return array($p[0] + $w * $this->scale, $p[1]); } }; ?>
|