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);
$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;