diff -r bd595ad770fc -r 1c2f13fd785c web/enmi/Zend/Barcode/Object/Code39.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/enmi/Zend/Barcode/Object/Code39.php Thu Jan 20 19:30:54 2011 +0100 @@ -0,0 +1,188 @@ + '000110100', + '1' => '100100001', + '2' => '001100001', + '3' => '101100000', + '4' => '000110001', + '5' => '100110000', + '6' => '001110000', + '7' => '000100101', + '8' => '100100100', + '9' => '001100100', + 'A' => '100001001', + 'B' => '001001001', + 'C' => '101001000', + 'D' => '000011001', + 'E' => '100011000', + 'F' => '001011000', + 'G' => '000001101', + 'H' => '100001100', + 'I' => '001001100', + 'J' => '000011100', + 'K' => '100000011', + 'L' => '001000011', + 'M' => '101000010', + 'N' => '000010011', + 'O' => '100010010', + 'P' => '001010010', + 'Q' => '000000111', + 'R' => '100000110', + 'S' => '001000110', + 'T' => '000010110', + 'U' => '110000001', + 'V' => '011000001', + 'W' => '111000000', + 'X' => '010010001', + 'Y' => '110010000', + 'Z' => '011010000', + '-' => '010000101', + '.' => '110000100', + ' ' => '011000100', + '$' => '010101000', + '/' => '010100010', + '+' => '010001010', + '%' => '000101010', + '*' => '010010100', + ); + + /** + * Partial check of Code39 barcode + * @return void + */ + protected function _checkParams() + { + $this->_checkRatio(); + } + + /** + * Width of the barcode (in pixels) + * @return int + */ + protected function _calculateBarcodeWidth() + { + $quietZone = $this->getQuietZone(); + $characterLength = (6 * $this->_barThinWidth + 3 * $this->_barThickWidth + 1) * $this->_factor; + $encodedData = strlen($this->getText()) * $characterLength - $this->_factor; + return $quietZone + $encodedData + $quietZone; + } + + /** + * Set text to encode + * @param string $value + * @return Zend_Barcode_Object + */ + public function setText($value) + { + $this->_text = $value; + return $this; + } + + /** + * Retrieve text to display + * @return string + */ + public function getText() + { + return '*' . parent::getText() . '*'; + } + + /** + * Retrieve text to display + * @return string + */ + public function getTextToDisplay() + { + $text = parent::getTextToDisplay(); + if (substr($text, 0, 1) != '*' && substr($text, -1) != '*') { + return '*' . $text . '*'; + } else { + return $text; + } + } + + /** + * Prepare array to draw barcode + * @return array + */ + protected function _prepareBarcode() + { + $text = str_split($this->getText()); + $barcodeTable = array(); + foreach ($text as $char) { + $barcodeChar = str_split($this->_codingMap[$char]); + $visible = true; + foreach ($barcodeChar as $c) { + /* visible, width, top, length */ + $width = $c ? $this->_barThickWidth : $this->_barThinWidth; + $barcodeTable[] = array((int) $visible, $width, 0, 1); + $visible = ! $visible; + } + $barcodeTable[] = array(0 , 1); + } + return $barcodeTable; + } + + /** + * Get barcode checksum + * + * @param string $text + * @return int + */ + public function getChecksum($text) + { + $this->_checkText($text); + $text = str_split($text); + $charset = array_flip(array_keys($this->_codingMap)); + $checksum = 0; + foreach ($text as $character) { + $checksum += $charset[$character]; + } + return array_search(($checksum % 43), $charset); + } +}