生成不重复订单号的方法

在实际开发中,我们经常会遇到需要根据日期来生成订单号的需求。然而,简单地将日期直接作为订单号可能会导致重复的情况发生。为了确保订单号的唯一性,我们可以结合日期和随机数生成一个不重复的订单号。

思路

我们可以通过将日期转换成特定格式的字符串,并在后面加上随机数来生成订单号。为了确保订单号的唯一性,我们可以将订单号存储起来,并在生成新订单号时进行校验。

代码实现

下面是一个Java示例代码,演示了如何根据日期和随机数生成不重复的订单号:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class OrderNumberGenerator {
    private static Set<String> orderNumberSet = new HashSet<>();

    public static String generateOrderNumber() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String dateStr = sdf.format(new Date());

        String orderNumber = dateStr + getRandomNumber();
        while (orderNumberSet.contains(orderNumber)) {
            orderNumber = dateStr + getRandomNumber();
        }
        orderNumberSet.add(orderNumber);

        return orderNumber;
    }

    private static String getRandomNumber() {
        Random random = new Random();
        int randomNumber = random.nextInt(1000);
        return String.format("%03d", randomNumber);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(generateOrderNumber());
        }
    }
}

在上面的代码中,我们定义了一个OrderNumberGenerator类,其中包含一个静态的orderNumberSet集合来存储已生成的订单号。generateOrderNumber方法用于生成订单号,首先将当前日期转换成特定格式的字符串,然后调用getRandomNumber方法生成随机数,并将两者拼接成订单号。如果生成的订单号已存在于集合中,则重新生成,直到生成一个不重复的订单号。

类图

下面是OrderNumberGenerator类的类图:

classDiagram
    class OrderNumberGenerator {
        - static Set<String> orderNumberSet
        + generateOrderNumber() String
        + getRandomNumber() String
    }

通过以上方法,我们可以确保根据日期生成的订单号不重复,保证了系统在生成订单时的唯一性。同时,我们也可以根据具体业务需求对订单号的生成逻辑进行调整,以满足不同场景下的唯一性要求。