blob: 2bdaf16ae790a3007435b51164741d3b6b350f0f (
plain) (
tree)
|
|
unit module Luhn;
sub is-luhn-valid(Str $input --> Bool) is export {
with $input.comb(/\d|\s/) -> @num-spc {
return False if @num-spc.elems !== $input.chars;
my Int @numbers = @num-spc.comb(/\d/)>>.Int;
return False if @numbers.elems < 2;
([+] gather for @numbers.reverse.kv -> $k, $v {
take $k !%% 2 ?? subtract-if-greater($v * 2, 9) !! $v;
}) %% 10
}
}
#| subtract-if-greater will subtract $to-sub from $num if $num is
#| greater than $to-sub.
sub subtract-if-greater(Int $num, Int $to-sub --> Int) {
$num > $to-sub ?? $num - $to-sub !! $num
}
|