UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。
作用
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
应用
目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。
生成方式
通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
版本
根据生成策略的不同,UUID有以下几种版本:
版本1:基于时间和机器的MAC地址生成。可能会泄露机器MAC地址。
版本2:基于时间戳、MAC地址以及POSIX UID/GID生成,用于标识POSIX用户或组。
版本3:基于MD5散列和命名空间(例如URL、域名、对象ID等)生成。
版本4:完全基于随机数生成,保证了很高的随机性。
版本5:基于SHA-1散列和命名空间生成。
在实践中,版本4的UUID最常用,因为它不涉及机器的MAC地址,也不依赖具体的命名空间。
各个版本的应用场景
UUID的各个版本在不同的场合和需求中有着各自的应用。以下是对每个版本在实践中的一些可能用途的解决:
版本1:因为此版本基于时间和机器的MAC地址生成,所以对于需要极小概率的碰撞和能追踪数据产生机器和时间的场景好用。如日志分析和复杂系统的事件追踪等,因为它提供了时间戳和MAC地址信息。但需要注意的是,版本1 UUID可能会泄露生成UUID的机器的MAC地址和精确时间,这可能是一种安全隐患。
版本2:这个版本是为POSIX系统设计的,其中包含了用户的id信息,所以在某些老的或特定的系统或协议中可能仍有使用。
版本3:这种UUID一般用于生成根据某些对象(如IP地址,域名,文件等)的唯一标识符。例如,当你需要根据URL,ISO的对象标识符或者其他已经存在的标识符来生成UUID时。但是,由于MD5被发现有潜在的安全隐患,这个版本已经不是非常推荐使用。
版本4:这是目前 最常用 的版本,因为它是基于随机数的,可以在任何情况下使用,只要你需要一个唯一标识符即可。这使得它用途非常广泛,例如,web应用中的会话ID、数据库的主键等。
版本5:与版本3类似,但使用了更安全的SHA-1散列进行计算。当你需要一个可以和某些唯一标识符相关联的UUID,并且对安全性有更高要求时,可以选择使用这个版本。
缺点
UUID占用的空间比较大
乱序,不能根据uuid做排序
过于随机,可读性差
java代码
package com.mytest;
import java.util.UUID;
public class UTest {
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString().replace("-", "");
System.out.println(uuid);
}}在数据库中的应用
将表中的id类型设置为 char 型,长度为 32,在insert时,将生成的 uuid 保存到数据库中
参考:
https://blog.csdn.net/gulugulu1103/article/details/134952281