Обычно я бы порекомендовал UUID / GUID (как NWCoder делает в своей ссылке ), но UUID - это 16 байтов необработанных данных, поэтому его нельзя выразить в 15 байтах данных, а тем более 15 буквенно-цифровыми символами.
Так тогда возникает вопрос, насколько «уникален»?
Будет просто уникально только для таблицы, просто используйте инкрементное значение и беззнаковые целые или шестнадцатеричные данные.
Уникальный для мира будет более сложным. Вы могли бы приблизиться, сгенерировав UUID, затем хэшируя его с помощью MD5, затем взяв столько битов, сколько сможете, и преобразовав его в базовую (10 + 26 + 26 для чувствительного к регистру или 10 + 26 для нечувствительного к регистру) и приняв первые 15 символов.
Уникально только для пользователя, но (как вы опишете позже) уникально при наличии возможности подключения к Интернету проще всего сделать, просто сгенерировав случайную строку из 15 буквенно-цифровых символов. Скорее всего, это будет функционально эквивалентно методу UUID / MD5, описанному выше - по сути, вероятность коллизии будет очень очень мала, и, учитывая, что у пользователя будет только несколько поездок, шансов на коллизии практически нет (при условии, что вы запустили генератор случайных чисел соответственно).