ISBN Checksum Tool
Validation Result
Yes, “0671657151
” is a valid ISBN number
- Check with Amazon UK or Amazon USA
- Check with Froogle UK or Froogle USA
- Check with WHSmith (UK)
Input form
Examples
- Check “
123456789X
” - Check “
0123-4567-89
” - Check “
123 456 7890
” - Check “
ISBN 184353066X
” - Check “
ISBN 0 571 08989 5
” - Check “
isbn 0-671657-15-1
”
Notes
Use this utility to check if an ISBN number is syntactically correct (as determined by the checksum). Currently only ISBN 11 numbers are supported.
This utility does not check if the ISBN number is registered to an actual publication, rather it merely checks to see if the format of the number is valid.
Authoritative details on ISBN numbers can be found in the ISBN Users' Manual.
Note: Where applicable the links to Amazon, Froogle, et al are provided for convenience only — I don't earn anything from them — rather you can use them to see if the publication actually exists, is in stock, what it's marketable value is, etc.
XML Ping Service
You can now perform ISBN checksum validation using a simple HTTP request from within your own applications. The protocol closely follows the popular TrackBack and XML Ping methods.
Submitting a Request
Here's an example:
Content-Type: application/x-www-form-urlencoded; charset=utf-8
ISBN=0123-456-789&Type=1
The “ISBN
” key is mandatory. The format of the value it can accept is quite flexible.
For example it will correctly extract the ISBN digits from inputs as diverse as “ISBN=0123-4567-89
”,
“ISBN=123 456 7890
”, “ISBN=ISBN 0 571 08989 5
” and
“ISBN=isbn 90-70002-04-3
”.
The “Type
” key is also mandatory and the value is always “1
”.
It is present for future-proofing in case additional validation features are added at a later stage.
Receiving the Reply
The reply comes in the form of an XML string, of which there are two different versions.
If the request is badly formatted or fails for some other technical reason then a HTTP status code other than 200 is returned along with XML like this:
<response>
<error>1</error>
<message>The error message</message>
</response>
If the request is correctly formatted then XML is returned with a HTTP 200 like so:
<response>
<error>0</error>
<valid>1</valid>
<parsedisbn>123456789X</parsedisbn>
</response>
If the “valid
” node contains a “1
” value then the
ISBN number is syntactically valid, otherwise a “0
” value indicates it is not.
The “parsedisbn
” node contains the ISBN number that was extracted from the input
request — any extraneous characters have been stripped away to leave the 10 raw ISBN digits.
The “error
” node is present again to provide some consistency in post-processing.
For correctly formatted HTTP requests it always has a value of “0
”, for badly formatted
HTTP requests (like the first example XML above) it always has a value of “1
”.
In certain cases the server may return data that is not XML — say if the server is encountering
problems beyond my control. Consequently any processing of the received data that you do should check
the HTTP return code and attempt to parse the response for XML well-formedness first, only then
should you attempt to extract the “error
” node value.
Usage Rules
If you're going to send more than a couple of hundred XML Ping requests per day then this service is probably not for you. To use the service you must send an identifiable HTTP User-Agent header with your HTTP request — anonymous user-agents may be blocked by the server software.