日期:2014-05-20  浏览次数:20711 次

怎样用java生成固定14位的随机流水号,要唯一 !
如题,我自己写了一个,是根据系统时间来产生的,但是后来觉得这样也不是唯一的,
(date.getMonth()   +   1)   *   0x5f5e100   +  
date.getDate()*   0xf4240   +  
date.getHours()   *   10000   +  
date.getMinutes()   *   100   +  
date.getSeconds();

位数还不够,而且同一秒产生的流水号是相同的   ,我要产生流水号是唯一的。

求各位给个函数
谢谢了

------解决方案--------------------
我写的,抛个砖,能看懂么

/**
* getPK,获得数据库使用的一个long型唯一主键
* 16位,同一微秒内3000个不会重复
* @return long
*/
private static long[] ls = new long[3000];
private static int li = 0;
public synchronized static long getPK()
{
long lo = getpk();
for (int i = 0; i < 3000; i++)
{
long lt = ls[i];
if (lt == lo)
{
lo = getPK();
break;
}
}
ls[li] = lo;
li++;
if (li == 3000)
{
li = 0;
}
return lo;
}

private static long getpk()
{
String a = (String.valueOf(System.currentTimeMillis())).substring(3, 13);
String d = (String.valueOf(Math.random())).substring(2, 8);
return Long.parseLong(a + d);
}