↓ 跳过正文

Java生成唯一ID

正能量 1 分钟阅读 更新于 2026-10-18

补充 Java 唯一 ID 示例的适用范围,区分进程内序列、随机标识与分布式唯一性。

Java 编程:原站配图。
Java生成唯一ID配图
package net.mmgg.util;

import java.io.File; import java.io.IOException; import java.text.DecimalFormat; import java.text.FieldPosition; import java.text.NumberFormat; import java.util.Random; import java.util.Stack; import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;

public class Identifier {     private static final FieldPosition HELPER_POSITION = new FieldPosition(0);     private static final long MAX = 999;     private static final long FIX = 1388505600000l;     private static long seq = 0;     static final char[] array={'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m','0','1','2','3','4','5','6','7','8','9','Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M'};

         public static String generate() {         synchronized (Identifier.class) {             StringBuffer sb = new StringBuffer("");             long datetime = System.currentTimeMillis() - FIX;             sb.append(datetime);             NumberFormat nf = new DecimalFormat("000");             nf.format(seq, sb, HELPER_POSITION);             if (seq == MAX) {                 seq = 0;             } else {                 seq++;             }             return sb.toString();         }     }          private static String _10_to_62(long number){         Long rest=number;         Stack<Character> stack=new Stack<Character>();         StringBuilder result=new StringBuilder(0);         while(rest!=0){             stack.add(array[new Long((rest-(rest/62)*62)).intValue()]);             rest=rest/62;         }         for(;!stack.isEmpty();){             result.append(stack.pop());         }         return result.toString();

}

    public static String uid() {      return _10_to_62(Long.parseLong(generate()));     }

    public static String generateRadix() {         return Long.toString(Long.parseLong(generate()), Character.MAX_RADIX);     }          public static int getRandom(int min, int max) { return new Random().nextInt(Math.abs(max - min)) + min; }

    public static int get6Number() { return getRandom(100000, 999999); }          public static String uuid() {         return UUID.randomUUID().toString();     }

    public static long getIdtoDate(String id) {         long longId = Long.parseLong(id, Character.MAX_RADIX);         String ids = String.valueOf(longId);         ids = ids.substring(0, ids.length() - 3);         return Long.parseLong(ids) + FIX;     }

}

补充阅读
#

补充 Java 唯一 ID 示例的适用范围,区分进程内序列、随机标识与分布式唯一性。

如何理解与使用
#

读代码时应找出时间、序列和随机部分,并确认计数状态存放在哪里;单进程中的同步并不能自动协调多个进程或多台机器。

验证与边界
#

验证时覆盖并发、进程重启和时钟变化。数据库唯一约束及冲突处理仍有价值,不能仅凭方法名称包含“唯一”就省略边界检查。