From eab507eb0893e6eb9f85f8fd95c7598e18ba8f1c Mon Sep 17 00:00:00 2001 From: amillar Date: Fri, 14 Jun 2002 06:28:14 +0000 Subject: [PATCH] Move checkvalidisbn subroutine to Input.pm --- C4/Input.pm | 44 +++++++++++++++++++++++++++++++++++--- acqui.simple/marcimport.pl | 35 +----------------------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/C4/Input.pm b/C4/Input.pm index 865ec7e144..153e282ac4 100644 --- a/C4/Input.pm +++ b/C4/Input.pm @@ -9,7 +9,9 @@ use vars qw($VERSION @ISA @EXPORT); $VERSION = 0.01; @ISA = qw(Exporter); -@EXPORT = qw(&checkflds &checkdigit); +@EXPORT = qw( + &checkflds &checkdigit &checkvalidisbn +); sub checkflds { my ($env,$reqflds,$data) = @_; @@ -49,7 +51,43 @@ sub checkdigit { $valid = 1; } return $valid; -} +} # sub checkdigit + +#-------------------------------------- +# Determine if a number is a valid ISBN number, according to length +# of 10 digits and valid checksum +sub checkvalidisbn { + use strict; + my ($q)=@_ ; # Input: ISBN number + + my $isbngood = 0; # Return: true or false + + $q=~s/x$/X/g; # upshift lower case X + $q=~s/[^X\d]//g; + $q=~s/X.//g; + if (length($q)==10) { + my $checksum=substr($q,9,1); + my $isbn=substr($q,0,9); + my $i; + my $c=0; + for ($i=0; $i<9; $i++) { + my $digit=substr($q,$i,1); + $c+=$digit*(10-$i); + } + $c=int(11-($c/11-int($c/11))*11+.1); + ($c==10) && ($c='X'); + if ($c eq $checksum) { + $isbngood=1; + } else { + $isbngood=0; + } + } else { + $isbngood=0; + } # if length good + + return $isbngood; + +} # sub checkvalidisbn + END { } # module clean-up code here (global destructor) - diff --git a/acqui.simple/marcimport.pl b/acqui.simple/marcimport.pl index b288c04915..587479740f 100755 --- a/acqui.simple/marcimport.pl +++ b/acqui.simple/marcimport.pl @@ -17,6 +17,7 @@ use DBI; use C4::Database; use C4::Acquisitions; use C4::Output; +use C4::Input; #------------------ # Constants @@ -1570,40 +1571,6 @@ sub addz3950queue { } # sub addz3950queue #-------------------------------------- -sub checkvalidisbn { - use strict; - my ($q)=@_ ; - - my $isbngood = 0; - - $q=~s/x$/X/g; # upshift lower case X - $q=~s/[^X\d]//g; - $q=~s/X.//g; - if (length($q)==10) { - my $checksum=substr($q,9,1); - my $isbn=substr($q,0,9); - my $i; - my $c=0; - for ($i=0; $i<9; $i++) { - my $digit=substr($q,$i,1); - $c+=$digit*(10-$i); - } - $c=int(11-($c/11-int($c/11))*11+.1); - ($c==10) && ($c='X'); - if ($c eq $checksum) { - $isbngood=1; - } else { - $isbngood=0; - } - } else { - $isbngood=0; - } # if length good - - return $isbngood; - -} # sub checkvalidisbn - -#------------------------- sub FormatMarcText { use strict; -- 2.39.5