当前位置:Gxlcms > PHP教程 > 生成优惠券码方案

生成优惠券码方案

时间:2021-07-01 10:21:17 帮助过:542人阅读

项目中遇到需要生成唯一券码的方案.目前有两种生成券码的方案 :

A. 提前生成一批券码(数据库中该字段添加唯一索引),这样保证了券码的唯一性,通过后台脚本预判断券码数量小于某个值,重新生成一批券码

B. 结合redis的方案, 通过redis 设置游标, 以八位的券码为例, 找出最大的八位质数,然后通过质数算法 和 游标 计算出八位的券码,但是该方法不能保证的券码的唯一性 有可能出现重复

A 方案能保证唯一 但是维护困难 B方案不能保证唯一性

大家还有什么好的算法推荐吗?

回复内容:

项目中遇到需要生成唯一券码的方案.目前有两种生成券码的方案 :

A. 提前生成一批券码(数据库中该字段添加唯一索引),这样保证了券码的唯一性,通过后台脚本预判断券码数量小于某个值,重新生成一批券码

B. 结合redis的方案, 通过redis 设置游标, 以八位的券码为例, 找出最大的八位质数,然后通过质数算法 和 游标 计算出八位的券码,但是该方法不能保证的券码的唯一性 有可能出现重复

A 方案能保证唯一 但是维护困难 B方案不能保证唯一性

大家还有什么好的算法推荐吗?

时间戳,随机数,哈希函数,用户信息(例如用户的ID,请求的IP什么的)等等……
看具体情况,组合起来用,基本可以实现每次生成的券码不重复。
如果要求比较高,可以建个表,建唯一索引,生成之后试着插入进去就能验证是否重复了。
(如果重复了,就再重新生成随机数,重新计算生成一次就好了。)
提前算什么的,代码复杂,且逗比,还是需要的时候即时计算比较好。

跟时间有关的东西就会是唯一的吧

可以用redis的自增操作,是原子性的,不会重复;如果长些也行就用uuid

人气教程排行