package com.uas.reservation.util; import java.text.SimpleDateFormat; import java.util.Date; /** * generate unique code * * @author sunyj * @since 2018/2/10 11:01 */ public class CodeGenerator { private final static int MAX_OFFSET = 16 * 16 * 16 - 16 * 16; private volatile static CodeGenerator generator; private int offset = 0; private CodeGenerator() { } public static CodeGenerator getGenerator() { if (generator == null) { synchronized (CodeGenerator.class) { if (generator == null) { generator = new CodeGenerator(); } } } return generator; } /** * generate one code: yyyyMMddHHmm + AAA(offset in 3 byte) *
* ensure that codes will not duplicate as long as generated codes' number is not greater than {@link CodeGenerator#MAX_OFFSET} every second * * @return code */ public synchronized String generate() { // offset, less than MAX_OFFSET offset = (offset + 1) % MAX_OFFSET + 16 * 16; return new SimpleDateFormat("yyyyMMddHHmm").format(new Date()) + Integer.toHexString(offset).toUpperCase(); } }