码迷,mamicode.com
首页 > 其他好文 > 详细

如何生成不重复的订单号?这里提供一个不重复订单号生成方法

时间:2017-08-19 14:10:20      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:提交   for   数字   end   remove   iterator   utils   sync   length   

 

最近老是被运营抱怨订单号太长不方便输入,可是如果随机生成太短的订单号又容易重复,造成客户提交订单失败。

夜不能眠下写了这个工具,完美解决了问题,在这里分享下,由于时间紧张考虑可能不太周到,如发现问题欢迎指教。

 



import
java.util.Collections; import java.util.HashSet; import java.util.Set; /** * 订单号生成器 */ public class OrderNoGenerator { private int size; private int length; private Set<String> orderNos; /** * 订单号生成器 * * 为了保证生成性能需满足条件size<10^length/4 * * @param size 保证连续不重读的数 * @param length 生成随机数的长度 */ public OrderNoGenerator(int size, int length) { this.size = size; this.length = length; AssertUtils.requireTrue(size < Math.pow(10, length) / 4, "参数不符合要求"); orderNos = Collections.synchronizedSet(new HashSet()); } /** * 获取不重复的随机数 * * @return */ public String generatorOrderNo() { if (orderNos.size() < size) { more(); } String next = orderNos.iterator().next(); orderNos.remove(next); return next; } private void more() { for (int i = 0; i < size * 4; i++) { orderNos.add(RandomUtils.randomNumber(length)); } } }
/**
 * 随机数工具
 */
public class RandomUtils {

    public static int[] nums = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    public static Random random = new Random();

    /**
     * 生成随机数字
     *
     * @param length 随机数长度
     * @return
     */
    public static String randomNumber(int length) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(10);
            builder.append(nums[index]);
        }
        return builder.toString();
    }
}

 

public class AssertUtils {

    public static void requireTrue(boolean value, String msg) {
        if (!value) {
            throw new RuntimeException(msg);
        }
    }

}

 

如何生成不重复的订单号?这里提供一个不重复订单号生成方法

标签:提交   for   数字   end   remove   iterator   utils   sync   length   

原文地址:http://www.cnblogs.com/cblogs/p/7396108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!