Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libs/Zend/Validate/Barcode/Ean13.php')
-rw-r--r--libs/Zend/Validate/Barcode/Ean13.php88
1 files changed, 73 insertions, 15 deletions
diff --git a/libs/Zend/Validate/Barcode/Ean13.php b/libs/Zend/Validate/Barcode/Ean13.php
index d5387e52f9..068809248c 100644
--- a/libs/Zend/Validate/Barcode/Ean13.php
+++ b/libs/Zend/Validate/Barcode/Ean13.php
@@ -1,4 +1,5 @@
<?php
+
/**
* Zend Framework
*
@@ -14,39 +15,96 @@
*
* @category Zend
* @package Zend_Validate
- * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
- * @version $Id: Ean13.php 20096 2010-01-06 02:05:09Z bkarwin $
+ * @version $Id: Ean13.php 16223 2009-06-21 20:04:53Z thomas $
*/
+
/**
- * @see Zend_Validate_Barcode_AdapterAbstract
+ * @see Zend_Validate_Abstract
*/
-// require_once 'Zend/Validate/Barcode/AdapterAbstract.php';
+require_once 'Zend/Validate/Abstract.php';
+
/**
* @category Zend
* @package Zend_Validate
- * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
-class Zend_Validate_Barcode_Ean13 extends Zend_Validate_Barcode_AdapterAbstract
+class Zend_Validate_Barcode_Ean13 extends Zend_Validate_Abstract
{
/**
- * Allowed barcode lengths
- * @var integer
+ * Validation failure message key for when the value is
+ * an invalid barcode
+ */
+ const INVALID = 'invalid';
+
+ /**
+ * Validation failure message key for when the value is
+ * not 13 characters long
*/
- protected $_length = 13;
+ const INVALID_LENGTH = 'invalidLength';
/**
- * Allowed barcode characters
- * @var string
+ * Validation failure message key for when the value
+ * does not only contain numeric characters
*/
- protected $_characters = '0123456789';
+ const NOT_NUMERIC = 'ean13NotNumeric';
/**
- * Checksum function
- * @var string
+ * Validation failure message template definitions
+ *
+ * @var array
*/
- protected $_checksum = '_gtin';
+ protected $_messageTemplates = array(
+ self::INVALID => "'%value%' is an invalid EAN-13 barcode",
+ self::INVALID_LENGTH => "'%value%' should be 13 characters",
+ self::NOT_NUMERIC => "'%value%' should contain only numeric characters",
+ );
+
+ /**
+ * Defined by Zend_Validate_Interface
+ *
+ * Returns true if and only if $value contains a valid barcode
+ *
+ * @param string $value
+ * @return boolean
+ */
+ public function isValid($value)
+ {
+ if (!is_string($value) || !ctype_digit($value)) {
+ $this->_error(self::NOT_NUMERIC);
+ return false;
+ }
+
+ $this->_setValue($value);
+ if (strlen($value) !== 13) {
+ $this->_error(self::INVALID_LENGTH);
+ return false;
+ }
+
+ $barcode = strrev(substr($value, 0, -1));
+ $oddSum = 0;
+ $evenSum = 0;
+
+ for ($i = 0; $i < 12; $i++) {
+ if ($i % 2 === 0) {
+ $oddSum += $barcode[$i] * 3;
+ } elseif ($i % 2 === 1) {
+ $evenSum += $barcode[$i];
+ }
+ }
+
+ $calculation = ($oddSum + $evenSum) % 10;
+ $checksum = ($calculation === 0) ? 0 : 10 - $calculation;
+
+ if ($value[12] != $checksum) {
+ $this->_error(self::INVALID);
+ return false;
+ }
+
+ return true;
+ }
}