[interchange-cvs] interchange - kwalsh modified lib/Vend/Order.pm

interchange-core@icdevgroup.org interchange-core@icdevgroup.org
Thu Nov 7 16:11:03 2002


User:      kwalsh
Date:      2002-11-07 20:40:17 GMT
Modified:  lib/Vend Order.pm
Log:
	* Added an optional $min_digits parameter to the luhn() sub
	  (default is 13, minimum is 2) so that any "LUHN-10"-encoded
	  numbers can be checked.

	* Added a new "luhn" check routine, for use in a profile.

Revision  Changes    Path
2.35      +14 -4     interchange/lib/Vend/Order.pm


rev 2.35, prev_rev 2.34
Index: Order.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Order.pm,v
retrieving revision 2.34
retrieving revision 2.35
diff -u -r2.34 -r2.35
--- Order.pm	17 Oct 2002 04:46:24 -0000	2.34
+++ Order.pm	7 Nov 2002 20:40:17 -0000	2.35
@@ -1,6 +1,6 @@
 # Vend::Order - Interchange order routing routines
 #
-# $Id: Order.pm,v 2.34 2002/10/17 04:46:24 mheins Exp $
+# $Id: Order.pm,v 2.35 2002/11/07 20:40:17 kwalsh Exp $
 #
 # Copyright (C) 1996-2001 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -28,7 +28,7 @@
 package Vend::Order;
 require Exporter;
 
-$VERSION = substr(q$Revision: 2.34 $, 10);
+$VERSION = substr(q$Revision: 2.35 $, 10);
 
 @ISA = qw(Exporter);
 
@@ -511,12 +511,15 @@
 # by Jon Orwant, from Business::CreditCard and well-known algorithms
 
 sub luhn {
-	my ($number) = @_;
+	my ($number,$min_digits) = @_;
 	my ($i, $sum, $weight);
 
+	$min_digits ||= 13;
+	$min_digits = 2 if $min_digits < 2;
+
 	$number =~ s/\D//g;
 
-	return 0 unless length($number) >= 13 && 0+$number;
+	return 0 unless length($number) >= $min_digits && 0+$number;
 
 	for ($i = 0; $i < length($number) - 1; $i++) {
 		$weight = substr($number, -1 * ($i + 2), 1) * (2 - ($i % 2));
@@ -1298,6 +1301,13 @@
 	return (1, $var, '')
 		if (defined $ref->{$var} and $ref->{$var} =~ /\S/);
 	return (undef, $var, errmsg("blank"));
+}
+
+sub _luhn {
+	my($ref, $var, $val) = @_;
+
+	return (1, $var, '') if luhn($val,2);
+	return (undef, $var, errmsg('failed the LUHN-10 check'));
 }
 
 sub counter_number {