"The input failed checksum validation", self::INVALID_CHARS => "The input contains invalid characters", self::INVALID_LENGTH => "The input should have a length of %length% characters", self::INVALID => "Invalid type given. String expected", ]; /** * Additional variables available for validation failure messages * * @var array */ protected $messageVariables = [ 'length' => ['options' => 'length'], ]; protected $options = [ 'adapter' => null, // Barcode adapter Zend\Validator\Barcode\AbstractAdapter 'options' => null, // Options for this adapter 'length' => null, 'useChecksum' => null, ]; /** * Constructor for barcodes * * @param array|string $options Options to use */ public function __construct($options = null) { if ($options === null) { $options = []; } if (! is_array($options) && ! ($options instanceof Traversable)) { $options = ['adapter' => $options]; } if (array_key_exists('options', $options)) { $options['options'] = ['options' => $options['options']]; } parent::__construct($options); } /** * Returns the set adapter * * @return Barcode\AbstractAdapter */ public function getAdapter() { if (! ($this->options['adapter'] instanceof Barcode\AdapterInterface)) { $this->setAdapter('Ean13'); } return $this->options['adapter']; } /** * Sets a new barcode adapter * * @param string|Barcode\AbstractAdapter $adapter Barcode adapter to use * @param array $options Options for this adapter * @return Barcode * @throws Exception\InvalidArgumentException */ public function setAdapter($adapter, $options = null) { if (is_string($adapter)) { $adapter = ucfirst(strtolower($adapter)); $adapter = 'Zend\\Validator\\Barcode\\' . $adapter; if (! class_exists($adapter)) { throw new Exception\InvalidArgumentException('Barcode adapter matching "' . $adapter . '" not found'); } $adapter = new $adapter($options); } if (! $adapter instanceof Barcode\AdapterInterface) { throw new Exception\InvalidArgumentException( sprintf( "Adapter %s does not implement Zend\\Validator\\Barcode\\AdapterInterface", (is_object($adapter) ? get_class($adapter) : gettype($adapter)) ) ); } $this->options['adapter'] = $adapter; return $this; } /** * Returns the checksum option * * @return string */ public function getChecksum() { return $this->getAdapter()->getChecksum(); } /** * Sets if checksum should be validated, if no value is given the actual setting is returned * * @param bool $checksum * @return bool */ public function useChecksum($checksum = null) { return $this->getAdapter()->useChecksum($checksum); } /** * Defined by Zend\Validator\ValidatorInterface * * Returns true if and only if $value contains a valid barcode * * @param string $value * @return bool */ public function isValid($value) { if (! is_string($value)) { $this->error(self::INVALID); return false; } $this->setValue($value); $adapter = $this->getAdapter(); $this->options['length'] = $adapter->getLength(); $result = $adapter->hasValidLength($value); if (! $result) { if (is_array($this->options['length'])) { $temp = $this->options['length']; $this->options['length'] = ""; foreach ($temp as $length) { $this->options['length'] .= "/"; $this->options['length'] .= $length; } $this->options['length'] = substr($this->options['length'], 1); } $this->error(self::INVALID_LENGTH); return false; } $result = $adapter->hasValidCharacters($value); if (! $result) { $this->error(self::INVALID_CHARS); return false; } if ($this->useChecksum(null)) { $result = $adapter->hasValidChecksum($value); if (! $result) { $this->error(self::FAILED); return false; } } return true; } }