0

0

在Java里UUID类如何生成唯一标识符_Java唯一ID生成说明

P粉602998670

P粉602998670

发布时间:2026-02-15 10:01:24

|

793人浏览过

|

来源于php中文网

原创

uuid.randomuuid()基于securerandom生成密码学安全的随机uuid,概率极低重复(2^(-122)),适用于主键等场景;命名uuid用nameuuidfrombytes()确保确定性;解析需严格校验格式并指定utf-8编码。

在java里uuid类如何生成唯一标识符_java唯一id生成说明

UUID.randomUUID() 是最常用也最安全的生成方式

Java 的 UUID 类本身不负责“生成”逻辑,它只是对 128 位值的封装;真正生成随机 UUID 的是 UUID.randomUUID() 这个静态工厂方法。它基于 SecureRandom 实现,满足密码学安全强度,适用于绝大多数需要唯一性的场景(如数据库主键、分布式事务 ID、临时 token)。

常见误区是以为调用一次就能“永久唯一”,其实它只保证**概率意义上极难重复**(理论碰撞概率约 2^(-122)),不是绝对数学唯一。但只要不是每秒生成数万亿个,实际可视为稳定可靠。

  • 不要自己拼接时间戳 + 随机数来模拟 UUID——容易出错且破坏标准格式
  • 避免在高并发循环中反复调用 UUID.randomUUID() 而不做缓存——SecureRandom 初始化有一定开销,但后续调用很快,一般无需优化
  • 生成结果是 UUID 对象,若需字符串形式,显式调用 .toString();它默认带连字符(如 "f47ac10b-58cc-4372-a567-0e02b2c3d479"),去掉连字符需自行 replace 或用 uuid.toString().replace("-", "")

UUID.nameUUIDFromBytes() 适合确定性命名场景

当你需要“相同输入总是产生相同 UUID”时,用 UUID.nameUUIDFromBytes()。它基于 MD5 哈希,把任意字节数组映射为固定 UUID,常用于将用户名、URL、资源路径等转换为稳定 ID。

注意:输入必须是 byte[],中文字符串要先指定编码(推荐 UTF-8),否则跨环境结果不一致:

立即学习Java免费学习笔记(深入)”;

360智图
360智图

AI驱动的图片版权查询平台

下载
String input = "user@example.com";
UUID id = UUID.nameUUIDFromBytes(input.getBytes(StandardCharsets.UTF_8));
  • 别直接传 string.getBytes()——平台默认编码不可控
  • MD5 不再推荐用于密码或签名,但用于命名 UUID 是标准做法,无安全风险
  • 输出 UUID 版本是 3;如果想用 SHA-1(版本 5),Java 标准库不提供,需借助 MessageDigest 自行实现

UUID.fromString() 解析字符串时格式错误会抛异常

从数据库或网络读取 UUID 字符串后,用 UUID.fromString() 转回对象。它对格式极其严格:必须是 32 位十六进制字符 + 4 个连字符,共 36 个字符,且连字符位置固定(8-4-4-4-12)。

典型错误包括:

  • 字符串含空格或换行:" f47ac10b-58cc-4372-a567-0e02b2c3d479 " → 抛 IllegalArgumentException
  • 缺少连字符:"f47ac10b58cc4372a5670e02b2c3d479" → 同样失败
  • 长度不对或含非法字符(如 'g')→ 直接崩溃

稳妥做法是先 trim 再校验正则:^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$,匹配后再解析。

性能和序列化要注意 byte[] 和字符串的开销差异

UUID 对象内部用两个 long 存高位/低位,内存仅 16 字节;但 .toString() 生成的是 36 字符的 String,占约 72 字节(UTF-16),序列化到 JSON 或存入日志时明显膨胀。

  • 高频日志场景,考虑只记录部分字段(如后 8 位)或改用 ByteBuffer.putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()) 二进制写入
  • Jackson 默认序列化为字符串,如需紧凑格式,可用自定义 Serializer 输出为 base64 或 16 进制字节数组
  • 数据库存储:PostgreSQL 有原生 UUID 类型,MySQL 推荐用 BINARY(16) 存 raw bytes(比 VARCHAR(36) 更快更省空间)
UUID 的“唯一性”依赖于生成逻辑和使用上下文,不是类型本身赋予的魔法。最容易被忽略的是字符串解析的健壮性处理和跨系统编码一致性——哪怕一行 getBytes() 没指定 charset,都可能让命名 UUID 在不同机器上产出不同结果。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

678

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

371

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

284

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

519

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

263

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

392

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

537

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

636

2023.08.14

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.6万人学习

C# 教程
C# 教程

共94课时 | 9.6万人学习

Java 教程
Java 教程

共578课时 | 66.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号