/**
  * checkCode
  *
  * Check Code will attempt to smartly detect the code type,
  * IE UPC, EAN or ISBN10/13.
  *
  * Since most 13 DIGIT EAN's also validate as an ISBN, the type will be ISBN
  * if the code validates as both.
  *
  * @param string $code Code to check.
  * @return Returns an array with the code type, check digit and if
  * the code is an ISBN, the ISBN parts. FALSE otherwise.
  */
 public static function checkCode($code)
 {
     $isbn = array();
     $upcValid = false;
     $upcEValid = false;
     $eanValid = false;
     $isbnValid = false;
     try {
         $upcValid = ProductValidator::checkUpcA($code);
     } catch (UpcException\UpcException $e) {
     }
     try {
         $upcEValid = ProductValidator::checkUpcE($code);
     } catch (UpcException\UpcException $e) {
     }
     try {
         $eanValid = ProductValidator::checkEan($code);
     } catch (EanException\EanException $e) {
     }
     try {
         $isbnValid = ProductValidator::checkIsbn($code, $isbn);
     } catch (IsbnException\IsbnException $e) {
     }
     $type = '';
     $checkDigit = 0;
     // UPC Code
     if ($upcValid) {
         $type = 'UPC-A';
         $checkDigit = UpcValidator\UpcValidator::getCheckDigit($code);
     } else {
         if ($upcEValid) {
             $type = 'UPC-E - ' . strlen($code);
             $code = UpcEValidator\UpcEExpander::expand($code);
             $checkDigit = UpcEValidator\UpcEValidator::getCheckDigit($code);
         } else {
             if ($eanValid) {
                 $type = 'EAN';
                 $checkDigit = EanValidator\EanValidator::getCheckDigit($code);
             } else {
                 if ($isbnValid && !$eanValid) {
                     $type = 'ISBN';
                     $checkDigit = IsbnValidator\IsbnValidator::getCheckDigit($code);
                 } else {
                     return false;
                 }
             }
         }
     }
     // Return array of values
     return array('type' => $type, 'checkDigit' => $checkDigit, 'isbn' => $isbn);
 }
 /**
  * Validate ISBN-13 Format
  *
  * Used internally by IsbnValidator::validate() which performs
  * string formatting before validating.
  *
  * @param string $isbn ISBN number to be validated
  * @return Returns FALSE if the ISBN is not a valid number, otherwise
  * returns the array set of number parts.
  */
 private static function validateIsbn13($isbn)
 {
     $check = IsbnValidator::getCheckDigit($isbn, 13);
     $remainder = $check % 10;
     if ($remainder === 0) {
         return self::getIsbnParts($isbn);
     } else {
         return false;
     }
 }