由於生成訂單ID、商品ID 或者什麼什麼ID的,不想用自增,又怕重復,於是就用 年與日時分秒 + 6位自增碼 (共計20位長度)來當作ID
注意:如果你的ID是Long型,就要注意,Long的最大長度為19位,如果直接轉的話會有問題,建議改為年月日時分秒+5位隨機數
具體代碼:
private static int sequence = 0;
private static int length = 6;
/**
* YYYYMMDDHHMMSS+6位自增長碼(20位)
* @author shijing
* 2015年6月29日下午1:25:23
* @return
*/
public static synchronized String getLocalTrmSeqNum() {
sequence = sequence >= 999999 ? 1 : sequence + 1;
String datetime = new SimpleDateFormat(yyyyMMddHHmmss)
.format(new Date());
String s = Integer.toString(sequence);
return datetime +addLeftZero(s, length);
}
/**
* 左填0
* @author shijing
* 2015年6月29日下午1:24:32
* @param s
* @param length
* @return
*/
public static String addLeftZero(String s, int length) {
// StringBuilder sb=new StringBuilder();
int old = s.length();
if (length > old) {
char[] c = new char[length];
char[] x = s.toCharArray();
if (x.length > length) {
throw new IllegalArgumentException(
Numeric value is larger than intended length: + s
+ LEN + length);
}
int lim = c.length - x.length;
for (int i = 0; i < lim; i++) {
c[i] = '0';
}
System.arraycopy(x, 0, c, lim, x.length);
return new String(c);
}
return s.substring(0, length);
}
下面是測試的結果:
2015070816503700001