my @LUHN10_map = ( 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 ); sub johannz_LUHN10 { my @number = split('', shift); my ($sum, $pos) = (0, scalar(@number)); $sum += $pos--%2 ? $_ : $LUHN10_map[$_] for (@number); ($sum % 10 == 0) ? 1 : 0; }