From 9a22a62a72ad936158c3a52bb618f7d8a8f72936 Mon Sep 17 00:00:00 2001 From: levinse Date: Thu, 14 Jul 2011 04:22:28 +0000 Subject: [PATCH] add Isracard validation, RT13643 --- CreditCard.pm | 12 +++++++++--- t/validation.t | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 t/validation.t diff --git a/CreditCard.pm b/CreditCard.pm index 4993f4e..df40315 100644 --- a/CreditCard.pm +++ b/CreditCard.pm @@ -219,7 +219,7 @@ sub cardtype { sub generate_last_digit { my ($number) = @_; - #XXX doesn't work for Isracard, should die + die "invalid operation" if length($number) == 8 || length($number) == 9; my ($i, $sum, $weight); @@ -242,8 +242,14 @@ sub validate { $number =~ s/\D//g; - return 1 if $number =~ /^[\dx]{8,9}$/; #XXX Isracard does not use LUHN, - # validation not yet implemented + if ( $number =~ /^[\dx]{8,9}$/ ) { # Isracard + $number = "0$number" if length($number) == 8; + for($i=1;$i= 13 && 0+$number; diff --git a/t/validation.t b/t/validation.t new file mode 100644 index 0000000..953e4bc --- /dev/null +++ b/t/validation.t @@ -0,0 +1,20 @@ + +use Test::More tests => 1; +use Business::CreditCard; + +ok( test_card_validation() ); + +sub test_card_validation { + my %test_table=( + '10830529' => 'Isracard', + '010830529' => 'Isracard', + ); + while( my ($k, $v)=each(%test_table) ){ + if(!validate($k)){ + warn "Card $k - should be a valid $v but validation failed\n"; + return; + } + } + return 1; +} + -- 2.11.0