随机生成有规律的支付单号订单号工具类
package cn.ybl.basic.util;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 生成订单号、支付单号等的工具类,防止重复且有规律
*/
public class CodeGenerateUtils {
/**
* 获取商品编码
* 商品编码规则:nanoTime(后5位)*5位随机数(10000~99999)
* @return
*/
public static String generateProductCode(){
long nanoPart = System.nanoTime() % 100000L;
if(nanoPart<10000L){
nanoPart+=10000L;
}
long randomPart = (long)(Math.random()*(90000)+10000);
String code = "0"+String.valueOf((new BigDecimal(nanoPart).multiply(new BigDecimal(randomPart))));
return code.substring(code.length()-10);
}
/**
* @param id: 用户id
* 生成订单编号
* 订单编号规则:(10位):(年末尾*月,取后2位)+(用户ID%3.33*日取整后2位)+(timestamp*10000以内随机数,取后6位)
* @return
*/
public static String generateOrderSn(long id){
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
year = year % 10;
if(year == 0) year = 10;
int month = calendar.get(Calendar.MONTH)+1;
int yearMonth = year * month;
String yearMonthPart = "0"+yearMonth;
yearMonthPart = yearMonthPart.substring(yearMonthPart.length() - 2 );
int day = calendar.get(Calendar.DAY_OF_MONTH);
int dayNum = (int)((id % 3.33) * day);
String dayPart = "0"+dayNum;
dayPart = dayPart.substring(dayPart.length() - 2);
String timestampPart = ""+(Math.random() * 10000) * (System.currentTimeMillis()/10000);
timestampPart = timestampPart.replace(".", "").replace("E", "");
timestampPart = timestampPart.substring(0,6);
return yearMonthPart+dayPart+timestampPart;
}
/**
* 生成统一支付单号
* 规则:年(2)月(2)日(2)时(2)分(2)+timestamp*5位随机整数取后5位
* @return
*/
public static String generateUnionPaySn(){
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmm");
String dateTime = dateFormat.format(calendar.getTime());
dateTime = dateTime.substring(2);
String timestampPart = ""+(Math.random() * 10000) * (System.currentTimeMillis()/10000);
timestampPart = timestampPart.replace(".", "").replace("E", "");
timestampPart = timestampPart.substring(0,5);
return dateTime+timestampPart;
}
public static void main(String[] args) {
for(long i=0;i<5;i++)
{
//String timestampPart = ""+(Math.random() * 10000) * (System.currentTimeMillis()/10000);
//System.out.println(timestampPart);
//System.out.println(generateOrderSn(i));
System.out.println(generateUnionPaySn());
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App