我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java生成UUID的常用方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java生成UUID的常用方式

  1. java.util.UUID类来生成UUID

import java.util.UUID;public class UUIDGenerator {    public static void main(String[] args) {                //随机生成一个UUID对象        UUID uuid = UUID.randomUUID();        System.out.println("生成的UUID为:" + uuid.toString());                //通过给定的字符串名称和命名空间生成UUID对象        UUID uuid2 = UUID.nameUUIDFromBytes("example_name".getBytes());        System.out.println("生成的UUID2为:" + uuid2.toString());    }}

  1. Apache Commons IO库中的UUIDUtils类

import org.apache.commons.io.UUIDUtils;public class UUIDGenerator {    public static void main(String[] args) {                //随机生成一个UUID字符串        String uuid = UUIDUtils.randomUUID().toString();        System.out.println("生成的UUID为:" + uuid);    }}
  1. 使用Google Guice库中的UUIDGenerator类生成UUID

import com.google.inject.Inject;import com.google.inject.name.Named;import java.util.UUID;public class UUIDGenerator {    private final UUID uuid;    @Inject    public UUIDGenerator(@Named("randomUUID") UUID uuid) {        this.uuid = uuid;    }    public UUID getUUID() {        return uuid;    }        public static void main(String[] args) {        UUIDGenerator generator = new UUIDGenerator(UUID.randomUUID());        System.out.println("生成的UUID为:" + generator.getUUID().toString());    }}
  1. 使用JDK的MessageDigest类和SecureRandom类:可以通过Hash算法和随机数生成UUID

写法一:import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.util.UUID;public class UUIDGenerator {    public static void main(String[] args) throws NoSuchAlgorithmException {        SecureRandom secureRandom = new SecureRandom();        byte[] seed = secureRandom.generateSeed(16);        MessageDigest md5 = MessageDigest.getInstance("MD5");        md5.update(seed);        UUID uuid = UUID.nameUUIDFromBytes(md5.digest());        System.out.println("生成的UUID为:" + uuid.toString());    }}写法二:import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Random;public class UUIDGenerator {    public static String generateUUID() {        String result = "";        try {            MessageDigest md = MessageDigest.getInstance("MD5");            byte[] messageDigest = md.digest((System.currentTimeMillis() + new Random().nextInt(99999999) + "").getBytes());            StringBuilder sb = new StringBuilder();            for (byte b : messageDigest) {                sb.append(String.format("%02x", b));            }            result = sb.toString();        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        return result;    }}
  1. 使用Snowflake算法生成UUID

Snowflake算法是Twitter开源的分布式ID生成算法,可以在多个节点上生成唯一的ID

import com.github.f4b6a3.uuid.UuidCreator;import com.github.f4b6a3.uuid.enums.UuidVariant;import com.github.f4b6a3.uuid.enums.UuidVersion;import com.github.f4b6a3.uuid.impl.TimeBasedUuidCreator;import java.time.Instant;public class UUIDGenerator {    public static void main(String[] args) {        UuidCreator creator = TimeBasedUuidCreator.withRandomNodeId();        Instant now = Instant.now();        long timestamp = now.getEpochSecond() * 1000 + now.getNano() / 1000000;        String uuid = creator.create(UuidVersion.VERSION_TIME_BASED, timestamp).toString();        System.out.println("生成的UUID为:" + uuid);    }}

Snowflake算法第二种:

public class UUIDGenerator {        private final long twepoch = 1483200000000L;        private final long workerIdBits = 5L;        private final long datacenterIdBits = 5L;        private final long maxWorkerId = -1L ^ (-1L << workerIdBits);        private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);        private final long sequenceBits = 12L;        private final long workerIdShift = sequenceBits;        private final long datacenterIdShift = sequenceBits + workerIdBits;        private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;        private final long sequenceMask = -1L ^ (-1L << sequenceBits);        private long workerId = 0L;        private long datacenterId = 0L;        private long sequence = 0L;        private long lastTimestamp = -1L;        public UUIDGenerator(long workerId, long datacenterId) {        if (workerId > maxWorkerId || workerId < 0) {            throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));        }        if (datacenterId > maxDatacenterId || datacenterId < 0) {            throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));        }        this.workerId = workerId;        this.datacenterId = datacenterId;    }        public synchronized long nextId() {        long timestamp = timeGen();        // 如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过,此时应当抛出异常        if (timestamp < lastTimestamp) {            throw new RuntimeException(                    String.format("Clock moved backwards.  Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));        }        // 如果是同一时间生成的,则进行毫秒内序列        if (lastTimestamp == timestamp) {            sequence = (sequence + 1) & sequenceMask;            // 毫秒内序列溢出            if (sequence == 0) {                // 阻塞到下一个毫秒,获得新的时间戳                timestamp = tilNextMillis(lastTimestamp);            }        }        // 时间戳改变,毫秒内序列重置        else {            sequence = 0L;        }        // 上次生成ID的时间截        lastTimestamp = timestamp;        // 移位并通过或运算拼到一起组成64位的ID        return ((timestamp - twepoch) << timestampLeftShift) //                | (datacenterId << datacenterIdShift) //                | (workerId << workerIdShift) //                | sequence;    }        protected long tilNextMillis(long lastTimestamp) {        long timestamp = timeGen();        while (timestamp <= lastTimestamp) {            timestamp = timeGen();        }        return timestamp;    }        protected long timeGen() {        return System.currentTimeMillis();    }}
  1. 将时间戳和随机数作为种子生成UUID

import java.util.UUID;public class UUIDGenerator {    public static void main(String[] args) {        long time = System.currentTimeMillis();        int random = (int) (Math.random() * Integer.MAX_VALUE);        UUID uuid = new UUID(time, random);        System.out.println("生成的UUID为:" + uuid.toString());    }}
  1. 使用Redis集群的redisson框架提供的RUID类生成UUID

import org.redisson.api.RUID;public class UUIDGenerator {    public static void main(String[] args) {        RUID ruid = RUID.randomUID();        System.out.println("生成的UUID为:" + ruid.toString());    }}
  1. 利用SecureRandom类生成

import java.security.SecureRandom;import java.util.UUID;public class UUIDGenerator {    public static String generateUUID() {        return UUID.randomUUID().toString();    }    public static String generateSecureUUID() {        SecureRandom random = new SecureRandom();        byte[] bytes = new byte[16];        random.nextBytes(bytes);        return UUID.nameUUIDFromBytes(bytes).toString();    }}

三方库详细版

  1. Apache Commons:
    引入以下Maven依赖
<dependency>    <groupId>commons-langgroupId>    <artifactId>commons-langartifactId>    <version>2.6version>dependency>

java示例代码:

import org.apache.commons.lang3.StringUtils;import java.util.UUID;public class GenerateUUID {    public static void main(String[] args) {        UUID uuid = UUID.randomUUID();        String uuidStr = StringUtils.remove(uuid.toString(), '-');        System.out.println("UUID:" + uuidStr);    }}
  1. Google Guava:

Google Guava库可以使用它的UUID类来生成UUID。需要引入以下Maven依赖:

<dependency>    <groupId>com.google.guavagroupId>    <artifactId>guavaartifactId>    <version>30.0-jreversion>dependency>

java示例:

import com.google.common.base.CharMatcher;import java.util.UUID;public class GenerateUUID {    public static void main(String[] args) {        UUID uuid = UUID.randomUUID();        String uuidStr = CharMatcher.is('-').removeFrom(uuid.toString());        System.out.println("UUID:" + uuidStr);    }}

注意事项
之前提到了 Apache Commons 的 UUIDUtils 工具类,但是这个工具类实际上是用于字符串格式与 UUID 转化的,而不是生成 UUID。
如果你想要使用 Apache Commons 中的工具类来生成 UUID ,可以使用 RandomStringUtils 类中的 randomUUID() 方法。下面是一个简单示例:

import org.apache.commons.lang3.RandomStringUtils;public class GenerateUUID {    public static void main(String[] args) {        String uuid = RandomStringUtils.randomNumeric(8) + "-" +                      RandomStringUtils.randomNumeric(4) + "-" +                      RandomStringUtils.randomNumeric(4) + "-" +                      RandomStringUtils.randomNumeric(4) + "-" +                      RandomStringUtils.randomNumeric(12);        System.out.println("UUID:" + uuid);    }}

来源地址:https://blog.csdn.net/qq_45699990/article/details/129814826

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java生成UUID的常用方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript生成UUID的方法有哪些

本篇内容介绍了“JavaScript生成UUID的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介UUID(Universall
2023-06-30

sql中uuid生成的方法是什么

在SQL中生成UUID(通用唯一标识符)的方法取决于所使用的数据库管理系统(DBMS)。以下是几种常见的DBMS中生成UUID的方法:MySQL:可以使用UUID()函数来生成UUID。例如,可以执行以下查询来生成UUID:SELECT
sql中uuid生成的方法是什么
2024-04-09

Python用UUID库生成唯一ID的方法示例

UUID介绍UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Universally Unique IDentifier,Python 中叫 UUID。它通
2022-06-04

JS生成唯一id方式之UUID和NanoID的示例分析

这篇文章给大家分享的是有关JS生成唯一id方式之UUID和NanoID的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、为什么 NanoID 正在取代 UUID1、.更安全 在大多数随机生成器中,它们使
2023-06-22

tk.mybatis实现uuid主键生成的方法是什么

这篇文章主要介绍“tk.mybatis实现uuid主键生成的方法是什么”,在日常操作中,相信很多人在tk.mybatis实现uuid主键生成的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”tk.my
2023-06-21

java生成xml的方式有哪些

在Java中生成XML文件的常用方式包括:使用DOM (Document Object Model):使用Java的DOM API可以创建一个XML文档,并通过操作节点来构建XML结构。使用SAX (Simple API for XML):
java生成xml的方式有哪些
2024-03-07

Java 生成随机数的 5 种方式

1. 使用Math类的random()方法生成0到1之间的随机数:```javadouble randomNum = Math.random();```2. 使用Random类的nextInt()方法生成指定范围内的随机整数:```java
2023-09-20

java的三种随机数生成方式

随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种:第一种:new Random()第二种:Math.random()第三种:currentTimeMillis()第一种需要借助java.util.Random类来产生
java的三种随机数生成方式
2015-06-20

如何用JAVA 生成有格式的 XLS

这篇文章将为大家详细讲解有关如何用JAVA 生成有格式的 XLS,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有什么方便的类库导出带格式的Excel吗?部分数据如下:ORDERID
2023-06-03

java中生成不同随机数的三种方式

java中产生随机数的方法主要有三种:1、new Random()2、Math.random()3、currentTimeMillis()第一种需要借助java.util.Random类来产生一个随机数发生器,也是最常用的一种,构造函数有两个,Random()
java中生成不同随机数的三种方式
2016-06-23

java分布式ID生成方法是什么

本篇内容介绍了“java分布式ID生成方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、需求缘起几乎所有的业务系统,都有生成一个唯
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录