Полагаю, из того, как вы сформулировали вопрос, не хотите хранить коды в базе данных (если вы это сделали, вы могли бы просто проверить каждый код в базе данных)
Итак, что вы можете сделать, это взять всю соответствующую информацию о том, что находится в купоне, затем смешать ее с секретной солью для предотвращения фальсификации.
Таким образом, предположим, что вам нужен купон для пользователя 23 стоимостью 200 долларов, вы можете создать строку типа «23_200» и вычислить хеш MD5 с секретной солью «BillTheLizard», чтобы получить 2671519131e974ee6fc746151e98f4a8, то есть полный код, который вы даете клиент 200_23_2671519131e974ee6fc746151e98f4a8
Теперь, когда вы получили код, вы разбиваете его на части и проверяете, что md5 ("200_23" + secret) = 2671519131e974ee6fc746151e98f4a8, чтобы проверить значение
Редактировать: если хэш 32 символа слишком длинный, вы всегда можете его обрезать, например, сокращение до 8 символов по-прежнему даст вам 4294967296 различных значений хеш-функции.