SEDOLs: Difference between revisions
Content added Content deleted
(Added Wren) |
(Added AppleScript.) |
||
Line 281: | Line 281: | ||
B000300 |
B000300 |
||
</pre> |
</pre> |
||
=={{header|AppleScript}}== |
|||
<lang applescript>on appendCheckDigitToSEDOL(sedol) |
|||
if ((count sedol) is not 6) then ¬ |
|||
return {false, "Error in appendCheckDigitToSEDOL handler: " & sedol & " doesn't have 6 characters."} |
|||
set chars to "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
|||
set vowels to "AEIOU" |
|||
set weights to {1, 3, 1, 7, 3, 9} |
|||
set s to 0 |
|||
considering diacriticals but ignoring case -- In case these are set otherwise when this handler's called. |
|||
repeat with i from 1 to 6 |
|||
set thisCharacter to character i of sedol |
|||
set o to (offset of thisCharacter in chars) |
|||
if ((o is 0) or (thisCharacter is in vowels)) then ¬ |
|||
return {false, "Error in appendCheckDigitToSEDOL handler: " & sedol & " contains invalid character(s)."} |
|||
set s to s + (o - 1) * (item i of weights) |
|||
end repeat |
|||
end considering |
|||
return {true, sedol & ((10 - (s mod 10)) mod 10)} |
|||
end appendCheckDigitToSEDOL |
|||
-- Test code: |
|||
set input to "710889 |
|||
B0YBKJ |
|||
406566 |
|||
B0YBLH |
|||
228276 |
|||
B0YBKL |
|||
557910 |
|||
B0YBKR |
|||
585284 |
|||
B0YBKT |
|||
B00030" |
|||
set output to {} |
|||
repeat with thisSEDOL in paragraphs of input |
|||
set {valid, theResult} to appendCheckDigitToSEDOL(thisSEDOL) |
|||
set end of output to theResult |
|||
end repeat |
|||
set astid to AppleScript's text item delimiters |
|||
set AppleScript's text item delimiters to linefeed |
|||
set output to output as text |
|||
set AppleScript's text item delimiters to astid |
|||
return output</lang> |
|||
{{output}} |
|||
<lang applescript>"7108899 |
|||
B0YBKJ7 |
|||
4065663 |
|||
B0YBLH2 |
|||
2282765 |
|||
B0YBKL9 |
|||
5579107 |
|||
B0YBKR5 |
|||
5852842 |
|||
B0YBKT7 |
|||
B000300"</lang> |
|||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |