ISBN
[ class tree: ISBN ] [ index: ISBN ] [ all elements ]

README

ISBN - International Standard Book Number
http://www.isbn-international.org/

Class/Package Name: ISBN


Usage Examples:
---------------

ISBN Validation:

$bool_valid = (bool) ISBN::validate('ISBN 992-2878783-0');

$isbn = new ISBN('ISBN 992-2878783-0');
$bool_valid = $isbn->isValid();

ISBN Conversion:

$isbn13 = ISBN::convert('0385339410');

$isbn13 = ISBN::convert('0385339410', ISBN_VERSION_ISBN_10, 
ISBN_VERSION_ISBN_13);

ISBN Handling:

$isbn = new ISBN('ISBN 992-2878783-0');
echo "ISBN Registrationgroup is: " . $isbn->getGroup();


Reference:
----------
This class is based on the standards documented by the international ISBN Agency 
itself:

ISBN-10:
ISBN Users' Manual International edition; Berlin 2001; International ISBN 
Agency; Fourth, revised edition. (2001 Handbook)

ISBN-13 & ISBN-13-978:
ISBN Users' Manual International Edition; Berlin 2005; International ISBN 
Agency; Fifth Edition (2005 Handbook)

ISBN-13-979:
http://www.isbn-international.org/en/revision.html

Because this class was developed within the changes from ISBN-10 to ISBN-13, it 
aims to support both versions and their formats. According to the international 
ISBN-Agency, ISBN-13 (ISBN-13-978) must be used in sole by 2007-01-01. ISBN-10 
routines are part of ISBN-13-978 as well. The agency itself only states that the 
current standard definition is valid for about the next 10 years (as of 2005). 
Talks about ISBN-13 and ISO are still on the go, ISBN-13 might be something 
still in change.

A change has been especially reserved in ISBN-13 based on the prefix (3 Digit 
EAN.UCC), meaning that 978 has other rules then 979 (2005 Handbook p.12). 979 is 
not used right now, an estimation by the international agency is, that its use 
might start around mid-2008.

For further reference, you can see the numbering and versioning of ISBN numbers 
in the ISBN Version identifiers section which is according to the Version 
constants.

ISBN Version constants (ISBN_*):
--------------------------------
* VERSION_NONE        META: not a version at all
* VERSION_UNKNOWN     FUZZY: input only: to pass an ISBN Number to the object
                      with an unknown version
* VERSION_ISBN_10     The ISBN Number valid until 2006-12-31 (2001 Handbook)
* VERSION_ISBN_13     The ISBN Number valid on from 2007-01-01 (2005 Handbook)
* VERSION_ISBN_13_978 ALIAS: same as VERSION_ISBN-13
* VERSION_ISBN_13_979 RESERVED: reserved, information still pending


Underlaying ISBN Number Scheme:
-------------------------------

                 ISBN Number
    (10 or 13 Digits + cosmetic chars)
                     |
      /--------------+-------------\
      |              |             |
   Prefix         ISBN-Body     Checkdigit
(3 Digit @I-13)   (9 Digit)     (1 "Digit")
                     |
           /---------+---------\
           |                   |
      Registration        ISBN-Subbody
         Group            (4-8 Digits)   
      (1-5 Digits)             |
                               |
                  /------------+-----------\
                  |                        |
              Registrant              Publication 
             (1-7 Digits)             (1-7 Digits)

Notes: Prefix (3 Digit EAN.UCC) is available in ISBN-13 only. Checkdigit is a 
true Digit in ISBN-13, in ISBN-10 its a Char with value of 0-9 and "X" or "x". 
Registrant was also named Publisher and Publication was named Title or Title 
identifier sometimes. ISBN-Body and ISBN-Subbody are names used in this class 
only, not within the offical ISBN documentation.

Validation:
-----------
How well does the validation work? This class aims to enable the validation at 
the same level as the international ISBN Agency does publicly provide the data 
for it. That means, that the class is right now able to validate and split ISBN 
numbers into their parts for version ISBN-10 and ISBN-13-978. This includes 
checksum based validation that is not subject to change (calculation of the 
Checkdigit is safe) as well as validation based on the Group Identifier (which 
changes sometimes only) as well as Registrant ranges, that do change more often 
on an overall view (see below).
It does not validate wether a specific Registrant exists nor does it validate 
that a specific publication exsists. These Validations enable the class to split 
an ISBN Number into all it's parts sothat the gathered data can be used to 
perform these more specific checks. If you need more information on any existing 
ISBN you need the annual book which is published by the international ISBN 
agency and a german publishing house which contains any ISBN number ever 
supplied. It is not known wehter this annual book handles duplicate use by 
certain publishers or not. If not, even the annual book is not complete.

Validation Data:
----------------
The validationprocess is based on the one describben by the ISBN Handbook. The 
extraction of Registration and ISBN-Subbody is relativly safe, the source-data 
is documented within the sourcecode. Splitting the ISBN-Subbody is related to 
information that is subject to change. 
http://www.isbn-international.org/converter/ranges.js gives a first history of 
the revisions (DD.MM.YYYY):

>>
20.12.2006; Added ranges for Palestine (9950) "00-29;300-840;8500-9999"
11.12.2006; Changed Serbia (86) 
"00-09;10-29;300-599;6000-7999;80000-89999;900000-999999";)
05.12.2006; Added Iran (600) 00-09;100-499;5000-8999;90000-99999
05.12.2006; Added Montenegro (9940) 0-1;20-49;500-899;9000-9999 
05.12.2006; Added Georgia (9941) 0-0;10-39;400-899;9000-9999 
20.11.2006; Changed Haiti (99935) 0-2;7-8;30-59;600-699;90-99
02.11.2006; Changed Ukraine (966) 00-19;2000-2999;300-699;700-8999;90000-99999
12.10.2006; Changed Turkey (9944) 0-2;300-499;5000-5999;60-89;900-999
11.10.2006; Corrected Nicaragua (99924) from 800 - 900 to 800-999
22.09.2006; Added Ecuador (9942) 00-89; 900-994; 9950-9999
15.09.2006; Added Uzbekistan (9943) 00-29; 300-399; 4000-9999
14.09.2006; Corrected Russia (5) 9909999 etc
07.09.2006: Corrected Greece (960) adding 7000-8499
21.08.2006: Altered Armenia (99941): 30-79; 800-999  
30.07.2006: Altered Romania (973) 100-169;1700-1999
30.05.2006: Added: Bolivia (99954); 0-2; 30-69; 700-999; Srpska (99955); 0-1; 
20-59; 600-899; 90-99
03.05.2006: Changed all 00-nn ranges to 00-09;10-nn
24.01.2006: Altered: Iran (964); 00-14;150-249;2500-2999; Moldova (9975) 
0;100-399;4000-4499;45-89
23.01.2006: Added: Turkey (9944) 0-5; 60-89: 900-999; Paraguay (99953) 0-2; 
30-79; 800-999; Altered: Romania (973) 0; 100-199
16.01.2006: Added: Algeria (9961) 0-2
Altered:gi.area9961.pubrange="0-2;
11.01.2006: Added: Indonesia (979) 000-099;1000-1499;15000-19999
21.11.2005: Added: Mali (99952) 0-4;50-79;800-999
16.11.2005: Altered: Romania (973) 85000-88999; 8900-9499; Added: Tajikistan 
(99947) 0-2; 30-69; 700-999
14.11.2005: Altered: Srpska (99938) 0-1;20-59; Added: Mongolia (99929) 0-4; 
50-79; 800-999
26.10.2005: Altered: Botswana (99912) 0-3;400-599
24.8.2005: Corrected: Finland (952) 80-94
17.8.2005: Added: South Pacific (982) 00-09
12.8.2005: Added: Cambodia (99950) 0-4, 50-79, 800-999
Altered:Srpska (99938) 600-999 changed to 600-899, 90-99
18.7.2005: Altered: Italy (88) 900000-999999 changed to 900000-949999, 
95000-99999
23.6.2005: Added / altered: Russia (5) 9910-9999
Turkey (975) 00000 - 00999, 990-999 (& changed 00-24 to 01-24)
Argentina (987) 00-09
Kuwait (99906) 0-2, 70-89, 9-9
<<

As you can see, there are changes from time to time. These changes affect the 
correct implementation of splitting the ISBN Subbody into Registrant and 
Publication. There are relativly often alterings, so the Check is only as good 
as the data available. Since the JS-file already contains all information in a 
machine-readable way, I added a HTML-file to import the JS-file from 
isbn-international website and to create the needed code for the class. You can 
find it in the tools folder, it is named codegen.html. Exampledata named 
ranges.js has been placed in the tools folder as well. The function 
__getISBN-10Groups() should be updated from time to time to reflect the changes. 
ISBN-10 and ISBN-13 groups tend to be the same, so there is no need right now to 
implement one or more further  __getISBN-XXGroups() function.

According to the international ISBN Agency, even this .js file might contain 
minor errors (as of 2006-09-13). There are talks about providing an XML file 
with the data, which will make the whole process more failsafe. I'll update this 
package if more information is available.


Parts of an ISBN:
-----------------
When instantiated, the class provides version and validity information as well 
as the data of each ISBN parts since version 0.1.0. The parts are the following 
right now:

Whole Number:
ISBN->getISBN
ISBN->setISBN

Parts:
ISBN->getEAN
ISBN->getGroup
ISBN->getPublisher
ISBN->getTitle
ISBN->getCheckdigit


Documentation generated on Tue, 06 Mar 2007 01:03:02 +0100 by phpDocumentor 1.3.1