Привязка кода и его возможностей - у вас на сервере в базе.
Зачем шифровать что-то?
Нужно просто зарандомить и записать в базу.
При использовании - пометить, что код был использован (для предотвращения повторного/многократного использования).
таблица: id(uint), PromoId(string), isUsed (bool), Capabilities (string/JSON)
генератор PromoId на 8 символов в mysql:
select conv(floor(999999999*(1+rand())), 20, 36)
Результаты генерации:
7NWRJK0E
8KS3L9PM
7W97CVQG
7UXQICE0