返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java生成UUID的常用方式
  • 955
分享到

Java生成UUID的常用方式

javaapachelog4j 2023-09-03 18:09:09 955人浏览 薄情痞子
摘要

java.util.UUID类来生成UUID import java.util.UUID;public class UUIDGenerator { public static void ma

  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

--结束END--

本文标题: Java生成UUID的常用方式

本文链接: https://lsjlt.com/news/392608.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java生成UUID的常用方式
    java.util.UUID类来生成UUID import java.util.UUID;public class UUIDGenerator { public static void ma...
    99+
    2023-09-03
    java apache log4j
  • JAVA怎么生成UUID
    这篇文章主要介绍了JAVA怎么生成UUID ,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.UUID的引入  开发的时候,数据库表总会有一个主键,以前可...
    99+
    2023-06-02
  • Oracle 生成uuid方法
    近日,遇到朋友问及如何生成UUID 是 通用唯一识别码(Universally Unique Identifier)方法,其实数据中是支持的 Oracle中生成跨系统的唯一识别符UUID非常方便,比生成序列还简单,直接用sys_guid()...
    99+
    2017-04-29
    Oracle 生成uuid方法 数据库入门 数据库基础教程 数据库 mysql
  • JS生成唯一id方式之UUID和NanoID
    目录一、为什么 NanoID 正在取代 UUID二、js如何生成三、NanoID的方式前言: 唯一id有了更好的方式,那就是NanoID,今天这篇文章记录一下NanoID 正在取代...
    99+
    2024-04-02
  • JavaScript生成UUID的方法有哪些
    本篇内容介绍了“JavaScript生成UUID的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简介UUID(Universall...
    99+
    2023-06-30
  • oracle自动生成uuid的实现方法
    目录oracle自动生成uuid方法1.创建一个表2.生成uuid的语句3.添加几条数据,查询就可以看到效果oracle获取UUID乱码oracle自动生成uuid方法 1.创建一个表 create table t_us...
    99+
    2024-04-02
  • JavaScript生成UUID的五种方法详解
    目录简介1.第一种2.第二种3.第三种4.第四种5.第五种简介 UUID(Universally Unique IDentifier) 全局唯一标识符。 UUID是一种由算法生成的二...
    99+
    2024-04-02
  • sql中uuid生成的方法是什么
    在SQL中生成UUID(通用唯一标识符)的方法取决于所使用的数据库管理系统(DBMS)。以下是几种常见的DBMS中生成UUID的方法...
    99+
    2024-04-09
    sql
  • Python用UUID库生成唯一ID的方法示例
    UUID介绍 UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Universally Unique IDentifie...
    99+
    2022-06-04
    示例 方法 Python
  • JS生成唯一id方式之UUID和NanoID的示例分析
    这篇文章给大家分享的是有关JS生成唯一id方式之UUID和NanoID的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、为什么 NanoID 正在取代 UUID.更安全 在大多数随机生成器中,它们使用不...
    99+
    2023-06-22
  • Python使用UUID库生成唯一ID
    UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Universally Unique IDentifier,Python 中叫 UUID。它通过MAC地...
    99+
    2023-01-31
    Python UUID ID
  • tk.mybatis实现uuid主键生成的方法是什么
    这篇文章主要介绍“tk.mybatis实现uuid主键生成的方法是什么”,在日常操作中,相信很多人在tk.mybatis实现uuid主键生成的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”tk.my...
    99+
    2023-06-21
  • java生成xml的方式有哪些
    在Java中生成XML文件的常用方式包括: 使用DOM (Document Object Model):使用Java的DOM A...
    99+
    2024-03-07
    java
  • java的三种随机数生成方式
    随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种:第一种:new Random()第二种:Math.random()第三种:currentTimeMillis()第一种需要借助java.util....
    99+
    2015-06-20
    java教程 java
  • Java 生成随机数的 5 种方式
    1. 使用Math类的random()方法生成0到1之间的随机数:```javadouble randomNum = Math.ra...
    99+
    2023-09-20
    Java
  • GoLang中生成UUID唯一标识的实现
    1、什么是UUID UUID简介 通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式...
    99+
    2024-04-02
  • tk.mybatis实现uuid主键生成的示例代码
    引入依赖 <dependency> <groupId>tk.mybatis</groupId> ...
    99+
    2024-04-02
  • 如何用JAVA 生成有格式的 XLS
    这篇文章将为大家详细讲解有关如何用JAVA 生成有格式的 XLS,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java有什么方便的类库导出带格式的Excel吗?部分数据如下:ORDERID ...
    99+
    2023-06-03
  • Java生成二维码的几种实现方式
    前言 本文将基于Spring Boot介绍两种生成二维码的实现方式,一种是基于Google开发工具包,另一种是基于Hutool来实现; 下面我们将基于Spring Boot,并采用两种方式实现二维码的...
    99+
    2023-09-06
    java 开发语言
  • Java随机生成字符串的4种方式
    java.util.UUID 类可用于生成UUID, 它的static randomUUID方法返回一个32个字符的字符串。 import java.util.UUID;public class RandomStringGenerator ...
    99+
    2023-09-08
    java 开发语言 jvm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作