生成ID模板:年月日时分秒+6位自增码

本文介绍了一种使用日期与时序组合生成唯一ID的方法,通过年月日时分秒结合六位自增码的方式,有效避免了ID重复的问题,并提供了具体的实现代码。

由于生成订单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

转载于:https://blog.51cto.com/13545923/2053400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值