<?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Barcode\Object; /** * Class for generate Ean5 barcode */ class Ean5 extends Ean13 { protected $parities = array( 0 => array('B','B','A','A','A'), 1 => array('B','A','B','A','A'), 2 => array('B','A','A','B','A'), 3 => array('B','A','A','A','B'), 4 => array('A','B','B','A','A'), 5 => array('A','A','B','B','A'), 6 => array('A','A','A','B','B'), 7 => array('A','B','A','B','A'), 8 => array('A','B','A','A','B'), 9 => array('A','A','B','A','B') ); /** * Default options for Ean5 barcode * @return void */ protected function getDefaultOptions() { $this->barcodeLength = 5; } /** * Width of the barcode (in pixels) * @return int */ protected function calculateBarcodeWidth() { $quietZone = $this->getQuietZone(); $startCharacter = (5 * $this->barThinWidth) * $this->factor; $middleCharacter = (2 * $this->barThinWidth) * $this->factor; $encodedData = (7 * $this->barThinWidth) * $this->factor; return $quietZone + $startCharacter + ($this->barcodeLength - 1) * $middleCharacter + $this->barcodeLength * $encodedData + $quietZone; } /** * Prepare array to draw barcode * @return array */ protected function prepareBarcode() { $barcodeTable = array(); // Start character (01011) $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); $firstCharacter = true; $textTable = str_split($this->getText()); // Characters for ($i = 0; $i < $this->barcodeLength; $i++) { if ($firstCharacter) { $firstCharacter = false; } else { // Intermediate character (01) $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); } $bars = str_split($this->codingMap[$this->getParity($i)][$textTable[$i]]); foreach ($bars as $b) { $barcodeTable[] = array($b, $this->barThinWidth, 0, 1); } } return $barcodeTable; } /** * Get barcode checksum * * @param string $text * @return int */ public function getChecksum($text) { $this->checkText($text); $checksum = 0; for ($i = 0; $i < $this->barcodeLength; $i ++) { $checksum += intval($text{$i}) * ($i % 2 ? 9 : 3); } return ($checksum % 10); } protected function getParity($i) { $checksum = $this->getChecksum($this->getText()); return $this->parities[$checksum][$i]; } /** * Retrieve text to encode * @return string */ public function getText() { return $this->addLeadingZeros($this->text); } }