/* Compute SEDOLs; includes check for invalid characters. */ sedol: procedure options (main); /* 3 March 2012 */ declare alphabet character (36) static initial ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'); declare weight (6) fixed static initial (1, 3, 1, 7, 3, 9); declare s character (6); declare (i, v, k) fixed; do while ('1'b); get edit (s) (a(6)); put skip edit (s) (a); /* Check for invalid characters: */ if verify(s, '0123456789BCDFGHJKLMNPQRSTVWXYZ') > 0 then stop; v = 0; do i = 1 to 6; k = index(alphabet, substr(s, i, 1)) - 1; v = v + weight(i) * k; end; k = mod(v, 10); v = mod(10 - k, 10); put edit (s, v) (x(2), a, f(1)); put edit (' ') (a); end; end sedol;