/** * Validate an ISBN value * * @param string $isbn Number to validate * @param string $ver Version to validate against * * @return integer|false Returns the Version to signal validity or false if * ISBN number is not valid * * @access private */ function _isIsbnValid($isbn, $ver = ISBN_DEFAULT_INPUTVERSION) { /* version handling */ $r = ISBN::_isbnVersionIs($ver); if ($r === false) { return false; } if ($ver === ISBN_VERSION_UNKNOWN) { $ver = ISBN::_isbnVersionGuess($isbn); } if (ISBN::_isbnVersionIsValid($ver) === false) { return false; } /* since a version is available now, normalise the ISBN input */ $isbnn = ISBN::_normaliseISBN($isbn); if ($isbnn === false) { return false; } /* normalzied ISBN and Version available, it's ok now * to perform indepth checks per version */ switch ($ver) { case ISBN_VERSION_ISBN_10: /* check syntax against checkdigit */ $isbnbody = ISBN::_extractISBNBody($isbnn); $check = ISBN::_extractCheckdigit($isbnn); if ($check === false) { return false; } $checkdigit = ISBN::_checkdigitISBN10($isbnbody); if ($checkdigit === false) { return false; } if ($checkdigit !== $check) { return false; } /* check registrationgroup validity */ $registrationgroup = false; $subbody = false; $r = ISBN::_isbnBodyParts($isbnbody, $registrationgroup, $subbody); if ($r == false) { return false; } /* check for undefined registrationgroup */ if (strlen($registrationgroup) == 0) { return false; } /* check registrant validity */ $groupid = intval($registrationgroup); $registrant = false; $publication = false; $r = ISBN::_isbnSubbodyParts($subbody, $groupid, $registrant, $publication); if ($r == false) { return false; } return true; case ISBN_VERSION_ISBN_13: case ISBN_VERSION_ISBN_13_978: /* validate EAN Prefix */ $ean = ISBN::_extractEANPrefix($isbnn); if ($ean !== '978') { return false; } /* check syntax against checkdigit */ $isbnbody = ISBN::_extractISBNBody($isbnn); $check = ISBN::_extractCheckdigit($isbnn); if ($check === false) { return false; } $checkdigit = ISBN::_checkdigitISBN13($isbnbody); if ($checkdigit === false) { return false; } if ($check !== $checkdigit) { return false; } /* validate group */ $isbnbody = ISBN::_extractISBNBody($isbnn); if ($isbnbody === false) { return false; } $registrationgroup = false; $subbody = false; $r = ISBN::_isbnBodyParts($isbnbody, $registrationgroup, $subbody); if ($r === false) { return false; } /* check for undefined registrationgroup */ if (strlen($registrationgroup) == 0) { return false; } /* validate publisher */ $registrant = false; $publication = false; $r = ISBN::_isbnSubbodyParts($subbody, $registrationgroup, $registrant, $publication); if ($r === false) { return false; } return $ver; case ISBN_VERSION_ISBN_13_979: /* not yet standarized */ return false; } return false; }