• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • Examples
  • File List

E:/E/GEAMP/www/openbiz/openbiz/others/Zend/Validate/Barcode/Ean13.php

00001 <?php
00002 
00027 require_once 'Zend/Validate/Abstract.php';
00028 
00029 
00036 class Zend_Validate_Barcode_Ean13 extends Zend_Validate_Abstract
00037 {
00042     const INVALID = 'invalid';
00043 
00048     const INVALID_LENGTH = 'invalidLength';
00049 
00054     const NOT_NUMERIC = 'ean13NotNumeric';
00055 
00061     protected $_messageTemplates = array(
00062         self::INVALID        => "'%value%' is an invalid EAN-13 barcode",
00063         self::INVALID_LENGTH => "'%value%' should be 13 characters",
00064         self::NOT_NUMERIC    => "'%value%' should contain only numeric characters",
00065     );
00066 
00075     public function isValid($value)
00076     {
00077         if (!is_string($value) || !ctype_digit($value)) {
00078             $this->_error(self::NOT_NUMERIC);
00079             return false;
00080         }
00081 
00082         $this->_setValue($value);
00083         if (strlen($value) !== 13) {
00084             $this->_error(self::INVALID_LENGTH);
00085             return false;
00086         }
00087 
00088         $barcode = strrev(substr($value, 0, -1));
00089         $oddSum  = 0;
00090         $evenSum = 0;
00091 
00092         for ($i = 0; $i < 12; $i++) {
00093             if ($i % 2 === 0) {
00094                 $oddSum += $barcode[$i] * 3;
00095             } elseif ($i % 2 === 1) {
00096                 $evenSum += $barcode[$i];
00097             }
00098         }
00099 
00100         $calculation = ($oddSum + $evenSum) % 10;
00101         $checksum    = ($calculation === 0) ? 0 : 10 - $calculation;
00102 
00103         if ($value[12] != $checksum) {
00104             $this->_error(self::INVALID);
00105             return false;
00106         }
00107 
00108         return true;
00109     }
00110 }

Generated on Thu Apr 19 2012 17:01:18 for openbiz by  doxygen 1.7.2