File indexing completed on 2024-12-22 05:37:11
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_Validate 0017 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0018 * @license http://framework.zend.com/license/new-bsd New BSD License 0019 * @version $Id$ 0020 */ 0021 0022 /** 0023 * @see Zend_Validate_Barcode_AdapterAbstract 0024 */ 0025 // require_once 'Zend/Validate/Barcode/AdapterAbstract.php'; 0026 0027 /** 0028 * @category Zend 0029 * @package Zend_Validate 0030 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0031 * @license http://framework.zend.com/license/new-bsd New BSD License 0032 */ 0033 class Zend_Validate_Barcode_Issn extends Zend_Validate_Barcode_AdapterAbstract 0034 { 0035 /** 0036 * Allowed barcode lengths 0037 * @var integer 0038 */ 0039 protected $_length = array(8, 13); 0040 0041 /** 0042 * Allowed barcode characters 0043 * @var string 0044 */ 0045 protected $_characters = '0123456789X'; 0046 0047 /** 0048 * Checksum function 0049 * @var string 0050 */ 0051 protected $_checksum = '_gtin'; 0052 0053 /** 0054 * Allows X on length of 8 chars 0055 * 0056 * @param string $value The barcode to check for allowed characters 0057 * @return boolean 0058 */ 0059 public function checkChars($value) 0060 { 0061 if (strlen($value) != 8) { 0062 if (strpos($value, 'X') !== false) { 0063 return false; 0064 } 0065 } 0066 0067 return parent::checkChars($value); 0068 } 0069 0070 /** 0071 * Validates the checksum 0072 * 0073 * @param string $value The barcode to check the checksum for 0074 * @return boolean 0075 */ 0076 public function checksum($value) 0077 { 0078 if (strlen($value) == 8) { 0079 $this->_checksum = '_issn'; 0080 } else { 0081 $this->_checksum = '_gtin'; 0082 } 0083 0084 return parent::checksum($value); 0085 } 0086 0087 /** 0088 * Validates the checksum () 0089 * ISSN implementation (reversed mod11) 0090 * 0091 * @param string $value The barcode to validate 0092 * @return boolean 0093 */ 0094 protected function _issn($value) 0095 { 0096 $checksum = substr($value, -1, 1); 0097 $values = str_split(substr($value, 0, -1)); 0098 $check = 0; 0099 $multi = 8; 0100 foreach($values as $token) { 0101 if ($token == 'X') { 0102 $token = 10; 0103 } 0104 0105 $check += ($token * $multi); 0106 --$multi; 0107 } 0108 0109 $check %= 11; 0110 $check = 11 - $check; 0111 if ($check == $checksum) { 0112 return true; 0113 } else if (($check == 10) && ($checksum == 'X')) { 0114 return true; 0115 } 0116 0117 return false; 0118 } 0119 }