[interchange-cvs] interchange - kwalsh modified lib/Vend/Order.pm
interchange-cvs at icdevgroup.org
interchange-cvs at icdevgroup.org
Wed Dec 7 12:15:50 EST 2005
User: kwalsh
Date: 2005-12-07 17:15:50 GMT
Modified: lib/Vend Tag: STABLE_5_4-branch Order.pm
Log:
* The last "digit" of an ISBN code can be a "X" (meaning 10),
which wasn't allowed for in the previous version.
Revision Changes Path
No revision
No revision
2.83.2.1 +14 -4 interchange/lib/Vend/Order.pm
rev 2.83.2.1, prev_rev 2.83
Index: Order.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Order.pm,v
retrieving revision 2.83
retrieving revision 2.83.2.1
diff -u -r2.83 -r2.83.2.1
--- Order.pm 8 Nov 2005 09:50:24 -0000 2.83
+++ Order.pm 7 Dec 2005 17:15:49 -0000 2.83.2.1
@@ -1,6 +1,6 @@
# Vend::Order - Interchange order routing routines
#
-# $Id: Order.pm,v 2.83 2005/11/08 09:50:24 racke Exp $
+# $Id: Order.pm,v 2.83.2.1 2005/12/07 17:15:49 kwalsh Exp $
#
# Copyright (C) 2002-2003 Interchange Development Group
# Copyright (C) 1996-2002 Red Hat, Inc.
@@ -29,7 +29,7 @@
package Vend::Order;
require Exporter;
-$VERSION = substr(q$Revision: 2.83 $, 10);
+$VERSION = substr(q$Revision: 2.83.2.1 $, 10);
@ISA = qw(Exporter);
@@ -1310,14 +1310,24 @@
# Values (product) 0 +81 +32 + 0 + 0 + 5 +24 + 9 + 6 + 8 --> sum is: 165
# Sum must be divisable by 11 without remainder: 165/11=15 (no remainder)
# Result: isbn 0-940016-33-8 is a valid isbn number.
+ # Note: the last "digit" could be a "X", which would be treated as 10 in the above
my($ref, $var, $val) = @_;
- $val =~ s/\D//g; # weed out non-digits
+ $val =~ s/[^\dXx]//g; # weed out non-digits
if( $val && length($val) == 10 ) {
my @digits = split("", $val);
my $sum=0;
for(my $i=10; $i > 0; $i--) {
- $sum += $digits[10-$i] * $i;
+ my $d = $digits[10 - $i];
+ if ($d =~ /[Xx]/) {
+ if ($i == 1) {
+ $d = 10;
+ }
+ else {
+ return (undef, $var, errmsg("'%s' not a valid isbn number", $val));
+ }
+ }
+ $sum += $d * $i;
}
return ( $sum%11 ? 0 : 1, $var, '' );
}
More information about the interchange-cvs
mailing list