Sedol_char = 
Sedolweight = [1,3,1,7,3,9]

def char2value(c)
  raise ArgumentError,  unless Sedol_char.include?(c)
  c.to_i(36)
end

def checksum(sedol)
  raise ArgumentError,  unless sedol.size == Sedolweight.size
  sum = sedol.chars.zip(Sedolweight).sum{|ch, weight| char2value(ch) * weight }
  ((10 - (sum % 10)) % 10).to_s
end

data = %w(710889
          B0YBKJ
          406566
          B0YBLH
          228276
          B0YBKL
          557910
          B0YBKR
          585284
          B0YBKT
          B00030
          C0000
          1234567
          00000A)

data.each do |sedol|
  print  % sedol
  begin
    puts sedol + checksum(sedol)
  rescue => e
    p e
  end
end