请用java写一个方法生成流水号,流水号的规则是年份4位月份2位日2位加上3位自增数字从001开始,方法参数是同规则的流水号,不为空时后三位流水号加1,为空时流水号为当前日期的后三位为001
时间: 2023-05-22 10:04:12 浏览: 95
非常感谢您的提问!以下是 Java 代码实现:
```
import java.text.SimpleDateFormat;
import java.util.Date;
public class SerialNumberGenerator {
private static String lastSerialNumber;
public static synchronized String generateSerialNumber(String serialNumber) {
String prefix = null;
int sequenceNumber = 0;
// Check if the input serialNumber is valid
if (serialNumber != null && serialNumber.length() == 9) {
try {
prefix = serialNumber.substring(0, 6);
sequenceNumber = Integer.parseInt(serialNumber.substring(6));
} catch (NumberFormatException e) {
// Do nothing, return a new serial number
}
}
// Generate a new serial number, starting from 001
if (prefix == null) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String date = df.format(new Date());
prefix = date.substring(2);
sequenceNumber = 0;
}
// Increment the sequence number and append to the prefix
sequenceNumber++;
String newSerialNumber = prefix + String.format("%03d", sequenceNumber);
// Update the lastSerialNumber
lastSerialNumber = newSerialNumber;
return newSerialNumber;
}
public static synchronized String getLastSerialNumber() {
return lastSerialNumber;
}
}
```
注意,这里使用了一个静态变量 lastSerialNumber 来保存最后一个生成的流水号,以便在下一次生成时使用上一次生成的流水号加一。如果调用 generateSerialNumber 方法时传入了一个已有的流水号,并且该流水号正确,则会将该流水号的后三位加一得到新的流水号。如果该流水号不正确或者为 null,则会根据当前日期生成一个新的流水号。
阅读全文