[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 {