生成UUID和自定义UUID算法

目录

一、什么是UUID?

二、UUID的应用场景

三、UUID的优缺点

四、生成UUID和自定义UUID算法

1.生成UUID(纯UUID)

代码:

打印:

2.自定义UUID算法

代码: 

打印:

3.自定义UUID进阶版

代码:

打印:

解释:

总结


一、什么是UUID?

   UUID是一个128位(16字节)长度的标识符,旨在唯一地标识信息和资源。它由32个十六进制数字组成,通常以5个部分分隔开来,形如“8-4-4-4-12”的字符串。UUID的独特性来自于其生成算法,基于时间戳、生成者的唯一标识符和硬件信息等多个因素。这使得UUID在极小概率下出现重复的可能性。

二、UUID的应用场景

   UUID在各种软件系统中都被广泛应用。在分布式系统中,每个节点可以使用UUID来唯一标识自己,从而避免了中心化的标识分配管理。在数据库系统中,UUID常用作主键,保证在分布式环境中记录的唯一性。此外,UUID还常用于构建唯一的会话标识、生成唯一的文件名、标记资源等场景。

三、UUID的优缺点

   优点之一在于,UUID能够在分布式系统中生成全局唯一标识,不依赖中心化的标识分配管理。另外,UUID的生成算法列入了时间戳等多个因素,使得冲突的概率大大降低。然而,UUID也存在缺点,其中最重要的是其长度较长、可读性较差,不适合直接作为用户可见的标识符。

四、生成UUID和自定义UUID算法

1.生成UUID(纯UUID)

代码:
package Huas;

import java.util.UUID;

public class UuidDemo {
	 
    public static void main(String[] args) {
    	   String uuid = UUID.randomUUID().toString();
    	    System.out.println("uuid = "+uuid);
    }

}
打印:

生成UUID和自定义UUID算法_第1张图片

2.自定义UUID算法

代码: 
package Huas;

import java.util.UUID;

public class UuidDemo {
	
    public static void main(String[] args) {
    	//1.生成一个以lyqy -开头的ID,并且把里面的 - 去掉
	    String lyqy = "lyqy-" + UUID.randomUUID().toString().replaceAll("-","");
	    System.out.println("lyqy = "+lyqy);
	    //2.生成一个以 dx- 开头的ID
	    String uuid = String.valueOf(UUID.randomUUID());
	    String dx = "dx-";
	    dx += uuid;
	    System.out.println("dx   = "+dx);;
    }

}
打印:

生成UUID和自定义UUID算法_第2张图片

3.自定义UUID进阶版

代码:
package Huas;

import java.util.Random;
import java.util.UUID;

public class UuidDemo {
	//自定义ALLOWED_CHARS,列举UUID可以出现在字符
	private static final String ALLOWED_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	//自定义UUID长度
    private static final int UUID_LENGTH = 36;
 
    public static String generateUUID() {
        StringBuilder uuidBuilder = new StringBuilder(UUID_LENGTH);
        Random random = new Random();
 
        for (int i = 0; i < UUID_LENGTH; i++) {
            if (i == 8 || i == 13 || i == 18 || i == 23) {
                uuidBuilder.append('-');
            } else {
                uuidBuilder.append(ALLOWED_CHARS.charAt(random.nextInt(ALLOWED_CHARS.length())));

            }
        }
 
        return uuidBuilder.toString();
    }
 
    public static void main(String[] args) {
        String customUUID = generateUUID();
        System.out.println(customUUID+"\n"+"customUUID长度 = "+customUUID.length());
    }

}
打印:

生成UUID和自定义UUID算法_第3张图片

解释:

   这段代码的作用是生成一个32位的UUID,并按照格式 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 进行分段,其中 X 代表由数字和字母组成的随机字符。

   首先,定义了一个常量 ALLOWED_CHARS,其中包含了所有允许出现的字符,包括数字、大写字母和小写字母。然后定义了常量 UUID_LENGTH,表示生成的UUID的长度。

    接下来,定义了一个 generateUUID() 方法,使用 StringBuilder 来构建UUID字符串。随机数生成器 Random 用来随机选择 ALLOWED_CHARS 中的字符拼接到 UUID 中。

    通过一个 for 循环,迭代长度为 UUID_LENGTH 的次数,其中 i 代表每次迭代的索引。在每次迭代中,如果索引 i 为 8、13、18 或 23,那么将"-"字符添加到 UUID 末尾,否则随机选择 ALLOWED_CHARS 中的字符添加到 UUID 末尾。

    最后,在 main() 方法中调用 generateUUID() 方法生成一个自定义格式的 UUID,并将其打印输出。

总结

   UUID作为一种用于生成唯一标识符的标准,在当今分布式系统和云计算的背景下显得尤为重要。它在各种场景中发挥着不可替代的作用,保证了分布式系统中各种信息的唯一性。同时,UUID也在一定程度上解决了分布式系统中唯一标识符的分配和管理问题。不过,在使用UUID时,我们也需要权衡其优缺点,并结合具体场景做出合理的选择。

你可能感兴趣的:(算法)