Можно использовать какую-нибудь симметричную систему шифрования. То есть, шифровать время действительности промо-кода закрытым ключом. Добавлять вместе с этим туда какой-нибудь "мусор", чтобы запутать все. Однако, вырисовывается проблема, есть возможность того, что этот ключ и алгоритм дешифровки кто-то сможет подсмотреть в исходном коде программы и создавать свои собственные промо-коды.