20 lines
678 B
Plaintext
20 lines
678 B
Plaintext
procedure main()
|
|
every write(sedol("710889"|"B0YBKJ"|"406566"|"B0YBLH"|"228276"|
|
|
"B0YBKL"|"557910"|"B0YBKR"|"585284"|"B0YBKT"|"B00030"))
|
|
end
|
|
|
|
procedure sedol(x) #: return the completed sedol with check digit
|
|
static w,c
|
|
initial {
|
|
every (i := -1, c := table())[!(&digits||&ucase)] := i +:= 1 # map chars
|
|
every c[!"AEIOU"] := &null # delete vowels
|
|
w := [1,3,1,7,3,9] # weights
|
|
}
|
|
|
|
if *(x := map(x,&lcase,&ucase)) = *w then { # match lengths
|
|
every (t :=0, i := 1 to *x) do
|
|
t +:= \c[x[i]]*w[i] | fail # accumulate weighted chars
|
|
return x || (10 - (t%10)) % 10 # complete
|
|
}
|
|
end
|