java生成订单号
⑴ 如何生成唯一订单号
首先,订单号有3个性质:1.唯一性 2.不可推测性 3.效率性
唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复。
况且满足这些条件的同时订单号还要足够的短。
我在java下定制的订单号生成方式如下:
int r1=(int)(Math.random()*(10));//产生2个0-9的随机数
int r2=(int)(Math.random()*(10));
long now = System.currentTimeMillis();//一个13位的时间戳
String paymentID =String.valueOf(r1)+String.valueOf(r2)+String.valueOf(now);// 订单ID
目前规则来看,两个人在同一微秒提交订单重复的概率为1%
订单效果:251393292999921
望采纳!
⑵ java自动生成订单编号问题
为了30分:
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static final String PREFIX = "DD";
private static long code;
public static void main(String[] args) {
System.out.println(Test.nextCode());
System.out.println(Test.nextCode());
System.out.println(Test.nextCode());
}
public static synchronized String nextCode() {
code++;
String str = new SimpleDateFormat("yyyyMM").format(new Date());
long m = Long.parseLong((str)) * 10000;
m += code;
return PREFIX + m;
}
}
⑶ java自动生成编号
private static int m=1;//全局静态变量,(必须static修饰)每调用一次方法自增1
public String add(){
addin(m);
return "addTiao";
}
public void addin(int a){
String str1="A";
Date date=new Date();
String str2=new SimpleDateFormat("yyyyMMdd"). format(date);//自动生成日期
int datee=Integer.parseInt(str2);
inlist=instockService.getInListDown();//按降幂排序
instockEntity=(InstockEntity) inlist.get(0);
String ss=instockEntity.getInstock_number();//得到最大日期
if(ss!=null){
String riqi=ss.substring(1, 9);
int riqi1=Integer.parseInt(riqi);
if(datee>riqi1){
a=1;//如果日期变大则初始化订单号
}
}
String str3=null;
if(a>=0&&a<=9){
str3="00"+String.valueOf(a);
}else if(a>=10&&a<=99){
str3="0"+String.valueOf(a);
}else if(a>=100&&a<=999){
str3=String.valueOf(a);
}
String instock_number=str1+str2+str3;
instockEntity.setInstock_number(instock_number);
instockService.add(instockEntity);
m=a+1;
}
⑷ java支付宝接口 订单号如何产生
订单号生成规则很多,比较常用的就是采用时间戳+随机数+序列号。
如:2015062615273130001
有问题欢迎提问,满意请采纳哦!
⑸ java怎么生成一个一天内不会重复的20位流水号
我为您写了 一遍,望采纳。
packageZxing;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.Random;
/**
*
*开发公司:SOJSON在线工具<p>
*版权所有:©www.sojson.com
*博客地址:http://www.sojson.com/blog/
*<p>
*
*Demo
*
*<p>
*
*区分责任人日期说明<br/>
*创建周柏成2017年4月11日09:43<br/>
*
*@authorzhou-cheng
*@[email protected]
*@version1.0,2017年4月11日09:43<br/>
*
*/
publicclassDemo{
publicstaticvoidmain(String[]args){
//格式化当前时间
SimpleDateFormatsfDate=newSimpleDateFormat("yyyyMMddHHmmssSSS");
StringstrDate=sfDate.format(newDate());
//得到17位时间如:20170411094039080
System.out.println("时间17位:"+strDate);
//为了防止高并发重复,再获取3个随机数
Stringrandom=getRandom620(3);
//最后得到20位订单编号。
System.out.println("订单号20位:"+strDate+random);
}
/**
*获取6-10的随机位数数字
*@paramlength想要生成的长度
*@returnresult
*/
(Integerlength){
Stringresult="";
Randomrand=newRandom();
intn=20;
if(null!=length&&length>0){
n=length;
}
intrandInt=0;
for(inti=0;i<n;i++){
randInt=rand.nextInt(10);
result+=randInt;
}
returnresult;
}
}
⑹ java实现自动生成流水号的方法
public
static
String
getOrderNo(){
long
No
=
0;
SimpleDateFormat
sdf
=
new
SimpleDateFormat("yyyyMMdd");
String
nowdate
=
sdf.format(new
Date());
No
=
Long.parseLong(nowdate)*1000;//这里如果一天订单多的话可以用一万或更大
No+=getNo();
return
getUserId+No;
}
public
static
int
getNo(){//返回当天的订单数+1
return
001;
}
public
static
String
getUserId(){
return
"123";
}
用System.out.print(getOrderNo());测试得到:12320060307001
一般订单号用这样还不错吧。呵呵