Пусть генерятся чуть более длинные, скажем, 6-значные коды из цифр 0-9 и букв A..H.
Нехитрым алгоритмом можно отображать натуральные целые идущие подряд в такие же, но вразнобой. Скажем, просто инвертировать порядок бит в их 32-битной записи. Или чуть сложнее перемешать биты. И вот уже 1, 2, 3 станут какими-то большими числами, не лежащими рядом. Их 16-ричная запись и будет вашим кодом талона.
32-битное целое это 8-значное 16-ричное. Удобнее сократить диапазон целых и длину записи до 4-знака (65535 значений) или 5-знака (миллион значений). Для небольшого предприятия вполне.
Генерите в БД талоны на сегодня - занимая очередные порядковые id. Из них получаются 5-значные коды типа 2F93A, D047C – которые можно предьявить на кассе и проверить.
Такого рода систему давно делал и она до сих пор действует для билетов в одном из московских клубов.