in reply to YAL10CI (Yet Another LUHN-10 Checksum Implementation)
my @luhnmap_1 = (0,2,4,6,8,1,3,5,7,9); my @luhnmap_2 = (); for my $x (0..9) { for my $y (0..9) { @luhnmap_2[$y*10+$x]=$luhnmap_1[$y]+$x; } } sub LUHN10 { my $num = shift; my $sum = 0; while ($str = substr $num, -2, 2, "") { $sum+=$bigmap[$str]; } return $sum % 10 ? 0 : 1; }
As bonus, if you don't count the additional table code (aw, come on, please :) ), it's shorter! You can increase this speed some more if you want, but the only way to get a huge increase is to create a bigger table (instead of 10 or 100 elements, try 10,000!). Not sure if it's worth going the next step (the memory and upfront cost).
Enjoy,
Gryn
|
|---|