add Isracard validation, RT13643
[Business-CreditCard.git] / CreditCard.pm
index 4993f4e..df40315 100644 (file)
@@ -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<length($number);$i++){
+            $sum += substr($number,9-$i,1) * $i;
+        }
+        return 1 if $sum%11 == 0;
+        return 0;
+    }
 
     return 0 unless length($number) >= 13 && 0+$number;