(phixonline)--> type string6(object s) return string(s) and length(s)=6 end type type sedolch(integer ch) return ch>='0' and ch<='Z' and (ch<='9' or ch>='A') and not find(ch,"AEIOU") end type function sedol(string6 t) sedolch c integer s = 0 for i=1 to 6 do c = t[i] s += iff(c>='A'?c-'A'+10:c-'0')*{1,3,1,7,3,9}[i] end for return t & mod(10-mod(s,10),10)+'0' end function constant tests = {"710889", "B0YBKJ", "406566", "B0YBLH", "228276", "B0YBKL", "557910", "B0YBKR", "585284", "B0YBKT", "B00030"} for i=1 to length(tests) do ?sedol(tests[i]) end for