| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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)
- * <p>
- * 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();
- }
- }
|