-- 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