Browse Source

[ZF-4352] Zend_Validate:

 - fixed casting for barcode validator


git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15921 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 years ago
parent
commit
2080ef4f83
2 changed files with 10 additions and 8 deletions
  1. 5 7
      library/Zend/Validate/Barcode/Ean13.php
  2. 5 1
      tests/Zend/Validate/BarcodeTest.php

+ 5 - 7
library/Zend/Validate/Barcode/Ean13.php

@@ -74,20 +74,18 @@ class Zend_Validate_Barcode_Ean13 extends Zend_Validate_Abstract
      */
     public function isValid($value)
     {
-        if (false === ctype_digit($value)) {
+        if (!is_string($value) || !ctype_digit($value)) {
             $this->_error(self::NOT_NUMERIC);
             return false;
         }
 
-        $valueString = (string) $value;
-        $this->_setValue($valueString);
-
-        if (strlen($valueString) !== 13) {
+        $this->_setValue($value);
+        if (strlen($value) !== 13) {
             $this->_error(self::INVALID_LENGTH);
             return false;
         }
 
-        $barcode = strrev(substr($valueString, 0, -1));
+        $barcode = strrev(substr($value, 0, -1));
         $oddSum  = 0;
         $evenSum = 0;
 
@@ -102,7 +100,7 @@ class Zend_Validate_Barcode_Ean13 extends Zend_Validate_Abstract
         $calculation = ($oddSum + $evenSum) % 10;
         $checksum    = ($calculation === 0) ? 0 : 10 - $calculation;
 
-        if ($valueString[12] != $checksum) {
+        if ($value[12] != $checksum) {
             $this->_error(self::INVALID);
             return false;
         }

+ 5 - 1
tests/Zend/Validate/BarcodeTest.php

@@ -94,7 +94,11 @@ class Zend_Validate_BarcodeTest extends PHPUnit_Framework_TestCase
     public function testNonStringValidation()
     {
         $barcode = new Zend_Validate_Barcode('upc-a');
-        $this->assertFalse($barcode->isValid(123.40));
+        $this->assertFalse($barcode->isValid(106510000.4327));
+        $this->assertFalse($barcode->isValid(array('065100004327')));
+
+        $barcode = new Zend_Validate_Barcode('ean-13');
+        $this->assertFalse($barcode->isValid(06510000.4327));
         $this->assertFalse($barcode->isValid(array('065100004327')));
     }
 }