isCusip = function(s) if s.len != 9 then return false sum = 0 for i in range(0, 7) c = s[i] v = 0 if c >= "0" and c <= "9" then v = code(c) - 48 else if c >= "A" and c <= "Z" then v = code(c) - 55 else if c == "*" then v = 36 else if c == "@" then v = 37 else if c == "#" then v = 38 else return false end if if i%2 == 1 then v *= 2 // check if odd as using 0-based indexing sum += floor(v/10) + v%10 end for return code(s[8]) - 48 == (10 - (sum%10)) % 10 end function candidates = [ "037833100", "17275R102", "38259P508", "594918104", "68389X106", "68389X105", ] for candidate in candidates s = "valid" if not isCusip(candidate) then s = "invalid" print candidate + " -> " + s end for