Математический подход: возьмите два простых числа, a и m, причём M < a < m, m — наибольшее простое, меньшее чем {мощность алфавита}^{количество символов в коде}. f(i) = i * a (mod m), f(s) = i * a^-1 (mod m), где a^-1 — обратное к a по модулю m.
Программистский подход: f(i) = биты числа i в обратном порядке. Тогда у последовательных билетов коды не будут казаться последовательными. После преобразования в строку можно добавить случайных символов в фиксированные места.