If you're looking for a PHP util, I've got one at
http://www.blyberg.net/files/ -- I've got to do a little bugfix, but it
works as-is.
-----Original Message-----
From: Code for Libraries [mailto:[log in to unmask]] On Behalf Of
Bryan Baldus
Sent: Friday, June 02, 2006 12:03 PM
To: [log in to unmask]
Subject: Re: [CODE4LIB] ISBN 13 chars
On Wednesday, May 31, 2006 11:01 AM, Kevin Kierans
>Anyone willing to share a (preferably) perl 13 to 10 character and a 10
>to 13 character conversion routine?
Below is something I use, in Perl, using Business::ISBN. It prints the
10 when given the 13, and then gives the correct check digit for the
13--so entering '978' plus the 10 as-is would print the correct 13.
###################
use Business::ISBN;
use strict;
use warnings;
print "Please enter 13 digit EAN or ISBN (or q to quit): "; while (my
$line = <>) {
chomp $line;
last if ($line =~ /^q/);
#remove all non-digit (or X) characters from line
$line =~ s/[^0-9xX]//g;
#skip lines with no ISBN/EAN number
if ($line =~ /^\d{9}[\dX]$/) {
my $is_valid = Business::ISBN::is_valid_checksum($line);
if ($is_valid == 1) {
print $line, " is valid\n";
} #valid
else {
print $line, " has bad checksum\n";
} #not valid
} #line is 10 digits
#unless line has ISBN already or is a non-digit line, convert
ean to isbn
elsif ($line =~ /^\d{12}[\dX]$/) {
my $isbn = Business::ISBN::ean_to_isbn($line);
if ($isbn) {
print $isbn, " is the 10-digit ISBN\n";
my $good_ean =
Business::ISBN::isbn_to_ean($isbn);
if ($good_ean) {
print $good_ean, " is the correct
13-digit for this ISBN\n";
} #if good ean was found
else {
print "Failed to find EAN for that
supposedly valid ISBN\n";
} #something went wrong--what?
} #isbn defined
else {
print $line, " is not a valid ean string\n";
} #invalid 13 digit
}
else {print "$line is an exception (not 10 or 13 digits)\n";}
print "Please enter 13 digit EAN or ISBN (or q to quit): "; } #
while
########################
I hope this helps,
Bryan Baldus
[log in to unmask]
[log in to unmask]
http://home.inwave.com/eija
eija
|