银联订单号永远不会重复的生成算法分析与示例 20170224
1. 说明
2013 年提供的几种银联订单号的生产算法分析与案例,因
CSDN 不能直接更新修改,现上传新资源,提供另一种更为优化及
简单一点的算法,以供网友分析、共享、学习。
银联订单号,前提是 16 位数的纯数字,在大型交易系统中,似
乎需要更好的算法,来确保生成的单号,在银联后台保证唯一性
(所谓的唯一性是,你的商户号在银联那边下面的单号唯一)。
2. 算法
新算法描述:时间戳 13 位+3 位数递增数。
新算法理论:提供静态变量,从 100 开始,递增到 999 后,又重置
为 100,以此类推。前面 13 位数的时间戳,是 1970 年一来的毫
秒数。
算法公式:No=Time+Poker;参数 Time 是毫秒级,几乎每刻都在
变化自增,假设一个 for 循环下去,你可以看到虽然是毫秒级,但
是也会有重复,所以为什么要加 Poker 参数来确保唯一。当然,可
以考虑将 Poker 参数变成 3 位数的随机数,但是,这三位随机数,
是存在高度重复的可能性,所以,不排除高并发时的重复可能性。
如下截图所示代码案例: