ISBN10, EAN13 相互変換Webアプリ

http://www.eiji8pou.net/perl/scripts/ean2isbn.cgi
探せばどこかにありそうなものだが、探すより作る方が気分的に楽だった。
Webにおくことに意味がある。多分。

スクリプト

#!/usr/local/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use Business::ISBN qw(ean_to_isbn);
use Business::Barcode::EAN13 qw(check_digit);
my $q = CGI->new;
print $q->header;
print $q->start_html(-title=>'EAN and ISBN10 converter');

print $q->h1('EAN to ISBN10');
print $q->start_form;
print 'EAN13:'.$q->textfield(-name=>'ean');
print $q->submit(-value=>'convert');
if ( $q->param('ean') ) {
	print $q->start_div;
	my $ean = $q->param('ean');
	if ( $ean =~ /^(\d{12})(\d{1})$/ ) {
		my ( $ean12, $cd ) = ( $1, $2 );
		my $ccd = check_digit($ean12);
		if ( $ccd ne $cd ) {
			print "valid check degit is $ccd.".$q->br;
			$ean = $ean12.$ccd;
		}
		if ( $ean =~ /^978/ ) {
			my $isbn = Business::ISBN->new(ean_to_isbn($ean));
			print $q->h2('EAN:'.$ean.' -> '.'ISBN:'.$isbn->as_string);
		} elsif ( $ean =~ /^979/ ) {
			print 'This code is Book. But, can not convert ISBN10.';
		}
	} else {
		print 'This is not EAN code.';
	}
	print $q->end_div;
}
print $q->end_form;

print $q->hr;

print $q->h1('ISBN10 to EAN');
print $q->start_form;
print 'ISBN10:'.$q->textfield(-name=>'isbn');
print $q->submit(-value=>'convert');
if ( $q->param('isbn') ) {
	print $q->start_div;
	my $isbn = $q->param('isbn');
	my $code = Business::ISBN->new($isbn);
	if ( $code ) {
		my $cd = $code->checksum;
		$code->fix_checksum;
		my $valid_isbn = $code->as_string;
		my $ccd = chop $valid_isbn;
		if ( $cd ne $ccd ) {
			print "valid check degit is $ccd.".$q->br;
		}
		print $q->h2('ISBN:'.$code->as_string.' -> '.'EAN:'.$code->as_ean);
	} else {
		print 'This is not ISBN10 code.';
	}
	print $q->end_div;
}
print $q->end_form;

print $q->end_html;

Perlってほんと書散らしに向いてるな。

注意点

以下のモジュールが必要です。

  • Business::ISBN
  • Business::ISBN::Data
  • Business::Barcode::EAN13

これらのモジュールは、PurePerlっぽいので、CPANからダウンロードして鯖に置けばそのまま使えます。CGIファイルとの位置関係に留意。