在只有 PHP 和 mysql 的环境下,做一个简单的发券、核销程序。其中券的**兑换码必须为 12 位数字**,数据量不会超过千万。如何生成不重复且乱序的券码?
最糟糕的方案是纯随机,然后到表里查一遍是否重复,重复则重新生成;不重复则插入
一个自认为好点的方案是用户 id 加一位随机数加截取时间戳后 x 位
例如用户 ID 为 123 ,则是 3 位,加随机数 4 位。此时剩余 8 位则截取时间戳后 8 位补上。重复概率应该就很低了
在尽可能不遍历表的情况下,还有更难以重复的生成算法吗?求不吝赐教
最糟糕的方案是纯随机,然后到表里查一遍是否重复,重复则重新生成;不重复则插入
一个自认为好点的方案是用户 id 加一位随机数加截取时间戳后 x 位
例如用户 ID 为 123 ,则是 3 位,加随机数 4 位。此时剩余 8 位则截取时间戳后 8 位补上。重复概率应该就很低了
在尽可能不遍历表的情况下,还有更难以重复的生成算法吗?求不吝赐教