Зависит от реализиции системы промокодов.
Генерировать можно просто перебором строк в таком же шаблоне, как на сайте, если шаблон есть.
1) Если в промокоде зашита инфа о действии бонуса (к примеру начилить 100 руб), то такое можно згенерить зная алгоритм + секретный ключ, но такие редко встретишь, а секретный ключ подбирать нет смысла.
2) Промокод генерится при выдаче и сохраняется в БД, сам по себе не имеет никакого смысла - это просто ключ, а по этому ключу что-то можно получить, в таком варианте есть уязвимость.
Припустим кому-то дали ключ, и владелец его ещё не активировал, если вам повезет, вы сгенерите его и активируете, но такие дыры тоже закрывают, методом каптчи при активации, или ещё сильнее привязывая промокод к юзеру, то есть его сможет активировать только указанный юзер.
Потому генерить их смысла нет, потому как в основном шаблоны чем-то похожи на GUID, а гуид практически не повторяется.
https://ru.wikipedia.org/wiki/GUID