根据算法创建一组"优惠券代码"; 无需存储代码

dre*_*joh 8 language-agnostic algorithm

我有一种情况,我们打印出"折扣卡"的运行,其中在卡上打印唯一代码,用户可以在在线商店兑换折扣.

我们创建了很多这样的卡,实际使用的卡很少,我想使用某种形式的方法来识别使用方法的有效代码,而不是将每个代码存储在数据库中.我们一次创建5000个这样的代码.可能一年约5次.

理想情况下,我希望能够像:

$coupons->generate(5000, 'unique_salt', 'prefix_');
Run Code Online (Sandbox Code Playgroud)

这将产生5,000"随机"代码,如:

prefix-23-3424-4324-3344 or
prefix-4H-34RE-22K3-PE3W
Run Code Online (Sandbox Code Playgroud)

unique saltprefix_将被保存到数据库中.然后,通过使用prefix_查找salt和识别代码是否有效,可以验证这些代码.

我有一个这样的形式,通过使用数字作为盐,找到可被盐整除的数字,然后重新排序数字,使其看起来是随机的.使用足够长的代码,需要一些工作才能找出模式.但我想认为有更好的方法......因为只有这么多的数字可以产生大量的代码,这些代码可以被整除salt.

(例如,2的盐将产生5,000到1到10,000之间的代码(并且很容易看到模式)......但是14000的盐将产生1到10,000之间的零代码)

这样做的另一个好处是我可以根据需要生成优惠券(例如,当我们逐个给予个人折扣时),并且能够跟踪基于prefix_... 等等时使用的优​​惠券等等.卡片如何/何时被传递出去,什么产生最佳回报.

当我只是将每个代码存储在数据库中时,我只是在旋转我的轮子吗?(或者只是玩得开心?):)