Damm algorithm: Difference between revisions

Added AppleScript.
(Add MAD)
(Added AppleScript.)
Line 304:
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}}==
557

edits