Algorithm::LUHN supports some odd inputs
That module may attempt to extend the purpose and use of the algorithm to inputs for which it was never designed; but in doing so, it invalidates itself and the algorithm.
Ie. The purpose of the algorithm is to catch 2 digit transposition errors in numeric identifiers; trying to extend that mathematics to non-numerics invalidates that purpose.
Eg. The use of Mod 9, on alpha data that has a 26 character alphabet means that some (34% of) combinations of 2-digits transpositions will not be detected.
Rules to live by:Don't perpetuate other people's bullshit.
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
In the absence of evidence, opinion is indistinguishable from prejudice.
Suck that fhit
| [reply] [Watch: Dir/Any] |
The module docs read like Standard & Poor's decided to do that, not the original module author, but I digress.
| [reply] [Watch: Dir/Any] |
> Unfortunately, Algorithm::LUHN supports some odd inputs, like non-numeric strings
Careful, is this algorithm well defined for input >=10 !?!
From the docs:
> For example, Standard & Poor's maps A..Z to 10..35 so the LIST to add these valid characters would be (A, 10, B, 11, C, 12, ...)
provided B=11 is on an odd position, what's the formula now to reduce 2*11?
cross total is 4, but 22-9 =13
and if it's even does 11 stay 11 with cross total 2 or do you take it module 10 hence resulting in 1?
| [reply] [Watch: Dir/Any] |
Just replicating the original module, including a fairly straight port to C that's passing the original module's tests...
Maybe I'll make a separate module that "does the right thing", but isn't compatible with Algorithm::LUHN.
| [reply] [Watch: Dir/Any] |
> Just replicating the original module, including a fairly straight port to C
This doesn't mean you have to ignore a fast algorithm for the proper task.
Mapping B => b0=11 is most likely producing the same effect like mapping B
to two digits b1,b2 < 10 with b1 for odd and b2 for even positions.
From there on you can still use the fast algorithm.
Otherwise I don't understand the point of the whole thread and am quizte happy I didn't try to waste time on coding an even faster solution.
| [reply] [Watch: Dir/Any] |