[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