/** * 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; } }