Welcome, guest | Sign In | My Account | Store | Cart

Will check SEDOL numbers as well as generate a SEDOL checksum digit.

Python, 49 lines
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49``` ```''' Copied by author from: http://paddy3118.blogspot.com/2008/08/sedol.html From: http://en.wikipedia.org/wiki/SEDOL SEDOLs are seven characters in length, consisting of two parts: a six-place alphanumeric code and a trailing check digit. ''' import string # constants sedolchars = string.digits + string.ascii_uppercase sedol2value = dict((ch, n) for n,ch in enumerate(sedolchars)) for ch in 'AEIOU': del sedol2value[ch] sedolchars = sorted(sedol2value.keys()) sedolweight = [1,3,1,7,3,9,1] def check(sedol): return len(sedol) == 7 and \ all(ch in sedolchars for ch in sedol) and \ sum(sedol2value[ch] * sedolweight[n] for n,ch in enumerate(sedol) ) % 10 == 0 def checksum(sedol): tmp = sum(sedol2value[ch] * sedolweight[n] for n,ch in enumerate(sedol[:6]) ) return sedolchars[ (10 - (tmp % 10)) % 10] sedol = '0263494' print sedol, check(sedol), checksum(sedol) print # From: http://www.rosettacode.org/wiki/SEDOL for sedol in ''' 710889 B0YBKJ 406566 B0YBLH 228276 B0YBKL 557910 B0YBKR 585284 B0YBKT '''.split(): print sedol + checksum(sedol) ```

No attempt was made to be fast. I concentrated on following the description. (The check() function for example correctly makes sure that the English vowels are not present).

 Created by Paddy McCarthy on Sun, 3 Aug 2008 (MIT)