Cleaned up contents of location information
[koha.git] / C4 / Input.pm
1 package C4::Input; #assumes C4/Input
2
3 use strict;
4 require Exporter;
5
6 use vars qw($VERSION @ISA @EXPORT);
7
8 # set the version for version checking
9 $VERSION = 0.01;
10
11 @ISA = qw(Exporter);
12 @EXPORT = qw(
13         &checkflds &checkdigit &checkvalidisbn
14 );
15  
16 sub checkflds {
17   my ($env,$reqflds,$data) = @_;
18   my $numrflds = @$reqflds;
19   my @probarr;
20   my $i = 0;
21   while ($i < $numrflds) {
22     if ($data->{@$reqflds[$i]} eq "") {
23       push(@probarr, @$reqflds[$i]);
24     }  
25     $i++
26   }
27   return (\@probarr);
28 }
29
30 sub checkdigit {
31   my ($env,$infl) =  @_;
32   $infl = uc $infl;
33   my @weightings = (8,4,6,3,5,2,1);
34   my $sum;
35   my $i = 1;
36   my $valid = 0;
37   #  print $infl."<br>";
38   while ($i <8) {
39     my $temp1 = $weightings[$i-1];
40     my $temp2 = substr($infl,$i,1);
41     $sum = $sum + ($temp1*$temp2);
42 #    print "$sum $temp1 $temp2<br>";
43     $i++;
44   }
45   my $rem = ($sum%11);
46   if ($rem == 10) {
47     $rem = "X";
48   }  
49   #print $rem."<br>";
50   if ($rem eq substr($infl,8,1)) {
51     $valid = 1;
52   }
53   return $valid;
54 } # sub checkdigit
55
56 #--------------------------------------
57 # Determine if a number is a valid ISBN number, according to length
58 #   of 10 digits and valid checksum
59 sub checkvalidisbn {
60         use strict; 
61         my ($q)=@_ ;    # Input: ISBN number
62
63         my $isbngood = 0; # Return: true or false
64
65         $q=~s/x$/X/g;           # upshift lower case X
66         $q=~s/[^X\d]//g;
67         $q=~s/X.//g;
68         if (length($q)==10) {
69             my $checksum=substr($q,9,1);
70             my $isbn=substr($q,0,9);
71             my $i;  
72             my $c=0;
73             for ($i=0; $i<9; $i++) { 
74                 my $digit=substr($q,$i,1);
75                 $c+=$digit*(10-$i);
76             }
77             $c=$c%11;  # % is the modulus function
78             ($c==10) && ($c='X');
79             if ($c eq $checksum) {
80                 $isbngood=1;
81             } else {
82                 $isbngood=0;
83             }
84         } else {
85             $isbngood=0;
86         } # if length good
87
88         return $isbngood;
89
90 } # sub checkvalidisbn
91
92  
93 END { }       # module clean-up code here (global destructor)