Exemplo n.º 1
0
 /**
  * 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;
 }