单实例环境,不是分布式

需要流水号

 

 

/**
 * 流水号生成器
 *
 * 年+天号+毫秒+随机数
 * 2019+134+480+11位随机数
 * 4+3+3+11 = 21位
 *
 * 
 * @author sxd
 * @date 2019/5/14 9:55
 */
public class SerialCreater {

    public static final String SERIAL_FROMAT = "%s%s%s%s";

    private String serialNum;

    public SerialCreater() {
        this.serialNum = String.format(
                SERIAL_FROMAT,
                DateUtil.thisYear(),
                Calendar.getInstance().get(Calendar.DAY_OF_YEAR),
                DateUtil.thisMillsecond(),
                random());
    }

    public static String getSerial(){
        return  new SerialCreater().serialNum;
    }



    private  String random(){
        Long a = new Random().nextLong();
        Long b = DateUtil.current(false);
        Long c = (a-b)>>>16;
        return autoGenericCode(c);
    }


    private  String autoGenericCode(Long old){
        String result = old.toString();
        int length = result.length();
        if (length > 11){
            result = result.substring(0,11);
        }else if (length < 11){
            result = String.format("%011d", old);
        }
        return result;
    }


}
View Code

相关文章:

  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2022-02-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2022-02-07
猜你喜欢
  • 2022-12-23
  • 2021-11-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-16
相关资源
相似解决方案