CodeGenerator.java 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package com.uas.reservation.util;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. /**
  5. * generate unique code
  6. *
  7. * @author sunyj
  8. * @since 2018/2/10 11:01
  9. */
  10. public class CodeGenerator {
  11. private final static int MAX_OFFSET = 16 * 16 * 16 - 16 * 16;
  12. private volatile static CodeGenerator generator;
  13. private int offset = 0;
  14. private CodeGenerator() {
  15. }
  16. public static CodeGenerator getGenerator() {
  17. if (generator == null) {
  18. synchronized (CodeGenerator.class) {
  19. if (generator == null) {
  20. generator = new CodeGenerator();
  21. }
  22. }
  23. }
  24. return generator;
  25. }
  26. /**
  27. * generate one code: yyyyMMddHHmm + AAA(offset in 3 byte)
  28. * <p>
  29. * ensure that codes will not duplicate as long as generated codes' number is not greater than {@link CodeGenerator#MAX_OFFSET} every second
  30. *
  31. * @return code
  32. */
  33. public synchronized String generate() {
  34. // offset, less than MAX_OFFSET
  35. offset = (offset + 1) % MAX_OFFSET + 16 * 16;
  36. return new SimpleDateFormat("yyyyMMddHHmm").format(new Date()) + Integer.toHexString(offset).toUpperCase();
  37. }
  38. }