[interchange-cvs] interchange - racke modified 2 files

interchange-cvs at icdevgroup.org interchange-cvs at icdevgroup.org
Fri Jul 11 08:37:28 UTC 2008


User:      racke
Date:      2008-07-11 08:37:28 GMT
Modified:  code/OrderCheck isbn.oc
Modified:  .        WHATSNEW-5.7
Log:
ISBN-13 support added

Revision  Changes    Path
1.2                  interchange/code/OrderCheck/isbn.oc


rev 1.2, prev_rev 1.1
Index: isbn.oc
===================================================================
RCS file: /var/cvs/interchange/code/OrderCheck/isbn.oc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- isbn.oc	9 Jul 2008 13:54:20 -0000	1.1
+++ isbn.oc	11 Jul 2008 08:37:28 -0000	1.2
@@ -5,33 +5,57 @@
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.  See the LICENSE file for details.
 # 
-# $Id: isbn.oc,v 1.1 2008-07-09 13:54:20 racke Exp $
+# $Id: isbn.oc,v 1.2 2008-07-11 08:37:28 racke Exp $
 
 CodeDef isbn OrderCheck 1
-CodeDef isbn Description ISBN-10 check digit verification
+CodeDef isbn Description ISBN-10/ISBN-13 check digit verification
 CodeDef isbn Routine <<EOR
 sub {
 	my($ref, $var, $val) = @_;
 	$val =~ s/[^\dXx]//g;	# weed out non-digits
-	if( $val && length($val) == 10 ) {
+	if ($val) {
 		my @digits = split("", $val);
-		my $sum=0;
-		for(my $i=10; $i > 0; $i--) {
-		  	my $d = $digits[10 - $i];
-			if ($d =~ /[Xx]/) {
-				if ($i == 1) {
-					$d = 10;
+		my $sum = 0;
+		my $check_digit = 0;
+		my $modulo;
+
+		if (@digits == 10 ) {
+			# ISBN-10 number
+			for(my $i=10; $i > 0; $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, '' );
+		} elsif (@digits == 13) {
+			# ISBN-13/EAN number
+			for (my $i = 0; $i < 12; $i++) {
+				if ($i % 2) {
+					$sum += 3 * $digits[$i];
+				} 
 				else {
-					return (undef, $var, errmsg("'%s' not a valid isbn number", $val));
-			    	}
+					$sum += $digits[$i];
+				}
+			}
+			
+			if ($modulo = $sum % 10) {
+		                $check_digit = 10 - $modulo;
+        		}
+
+			if (pop(@digits) == $check_digit) {
+				# verification successful
+				return (1, $var, '');
 			}
-			$sum += $d * $i;
 		}
-		return ( $sum%11 ? 0 : 1, $var, '' );
-	}
-	else {
-		return (undef, $var, errmsg("'%s' not a valid isbn number", $val));
 	}
+
+	return (undef, $var, errmsg("'%s' not a valid isbn number", $val));
 }
 EOR



2.6                  interchange/WHATSNEW-5.7


rev 2.6, prev_rev 2.5
Index: WHATSNEW-5.7
===================================================================
RCS file: /var/cvs/interchange/WHATSNEW-5.7,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -r2.5 -r2.6
--- WHATSNEW-5.7	10 Jul 2008 14:56:31 -0000	2.5
+++ WHATSNEW-5.7	11 Jul 2008 08:37:28 -0000	2.6
@@ -30,6 +30,6 @@
 OrderCheck
 ----------
 
-* relocate isbn order check to code/OrderCheck.
+* added ISBN-13 support to isbn order check and relocated it to code/OrderCheck.
 
 (end)







More information about the interchange-cvs mailing list