42 lines
1.5 KiB
AppleScript
42 lines
1.5 KiB
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
|
|
|
|
script o
|
|
property table : {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}
|
|
end script
|
|
set interim to 0
|
|
repeat with d in digits
|
|
set interim to item (interim * 10 + d + 1) of o's 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
|