Damm algorithm: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add MAD) |
(Added AppleScript.) |
||
Line 304: | Line 304: | ||
0</pre> |
0</pre> |
||
=={{header|AppleScript}}== |
|||
<lang applescript>-- Return a check digit value for the given integer value or numeric string. |
|||
-- The result is 0 if the input's last digit is already a valid check digit for it. |
|||
on damm(n) |
|||
set digits to {n mod 10} |
|||
set n to n div 10 |
|||
repeat until (n is 0) |
|||
set beginning of digits to n mod 10 |
|||
set n to n div 10 |
|||
end repeat |
|||
set table to {{0, 3, 1, 7, 5, 9, 8, 6, 4, 2}, ¬ |
|||
{7, 0, 9, 2, 1, 5, 4, 8, 6, 3}, ¬ |
|||
{4, 2, 0, 6, 8, 7, 1, 3, 5, 9}, ¬ |
|||
{1, 7, 5, 0, 9, 8, 3, 4, 2, 6}, ¬ |
|||
{6, 1, 2, 3, 0, 4, 5, 9, 7, 8}, ¬ |
|||
{3, 6, 7, 4, 2, 0, 9, 5, 8, 1}, ¬ |
|||
{5, 8, 6, 9, 7, 2, 0, 1, 3, 4}, ¬ |
|||
{8, 9, 4, 5, 3, 6, 2, 0, 1, 7}, ¬ |
|||
{9, 4, 3, 8, 6, 1, 7, 2, 0, 5}, ¬ |
|||
{2, 5, 8, 1, 4, 3, 6, 7, 9, 0}} |
|||
set interim to 0 |
|||
repeat with d in digits |
|||
set interim to item (d + 1) of item (interim + 1) of table -- AppleScript indices are 1-based. |
|||
end repeat |
|||
return interim |
|||
end damm |
|||
-- Task code: |
|||
local testNumbers, possibilities, output, n |
|||
set testNumbers to {5724, 57240, 572400, 87591, 100} |
|||
-- Include a number with a check digit actually generated by the handler. |
|||
tell (random number 1000000) to set end of testNumbers to it * 10 + (my damm(it)) |
|||
set possibilities to {" is invalid", " is valid"} |
|||
set output to {} |
|||
repeat with n in testNumbers |
|||
set end of output to (n as text) & item (((damm(n) is 0) as integer) + 1) of possibilities |
|||
end repeat |
|||
return output</lang> |
|||
{{output}} |
|||
<lang applescript>{"5724 is valid", "57240 is valid", "572400 is valid", "87591 is invalid", "100 is invalid", "3922446 is valid"}</lang> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |