$ include "seed7_05.s7i"; const func char: sedolCheckDigit (in string: sedol) is func result var char: checkDigit is ' '; local const array integer: weight is [] (1, 3, 1, 7, 3, 9); var char: ch is ' '; var integer: index is 0; var integer: item is 0; var integer: sum is 0; begin for ch key index range sedol do case ch of when {'0' .. '9'}: item := ord(ch) - ord('0'); when {'A' .. 'Z'} - {'A', 'E', 'I', 'O', 'U'}: item := ord(ch) - ord('A') + 10; otherwise: raise RANGE_ERROR; end case; sum +:= item * weight[index]; end for; checkDigit := chr(-sum mod 10 + ord('0')); end func; const proc: main is func local var string: sedol is ""; begin for sedol range [] ("710889", "B0YBKJ", "406566", "B0YBLH", "228276", "B0YBKL", "557910", "B0YBKR", "585284", "B0YBKT", "B00030") do writeln(sedol <& sedolCheckDigit(sedol)); end for; end func;