42 lines
1.4 KiB
Java
42 lines
1.4 KiB
Java
package com.ruoyi.system.ControllerUtil;
|
||
|
||
import java.util.Random;
|
||
|
||
public class GenerateCustomCode {
|
||
/**
|
||
* 生成自定义前缀+16位唯一数字码
|
||
* 例如:FEEB724145038871780
|
||
* @param prefix 前缀字母(可为null或空,自动生成4位大写字母)
|
||
* @return 生成的码
|
||
*/
|
||
public static String generCreateOrder(String prefix) {
|
||
// 生成前缀
|
||
String codePrefix = prefix;
|
||
if (codePrefix == null || codePrefix.trim().isEmpty()) {
|
||
// 随机生成4位大写字母
|
||
StringBuilder sb = new StringBuilder();
|
||
Random random = new Random();
|
||
for (int i = 0; i < 4; i++) {
|
||
char c = (char) ('A' + random.nextInt(26));
|
||
sb.append(c);
|
||
}
|
||
codePrefix = sb.toString();
|
||
}
|
||
// 生成16位唯一数字
|
||
// 用当前时间戳+3位随机数,保证唯一性和随机性
|
||
long timestamp = System.currentTimeMillis();
|
||
String timePart = String.valueOf(timestamp);
|
||
// 补足到16位
|
||
StringBuilder numberPart = new StringBuilder(timePart);
|
||
Random random = new Random();
|
||
while (numberPart.length() < 16) {
|
||
numberPart.append(random.nextInt(10));
|
||
}
|
||
// 如果超出16位则截取
|
||
String finalNumber = numberPart.substring(0, 16);
|
||
return codePrefix + finalNumber;
|
||
}
|
||
}
|
||
|
||
|