44 lines
1.4 KiB
AppleScript
44 lines
1.4 KiB
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
|