美文网首页
3, NanoID 和uuid的比较

3, NanoID 和uuid的比较

作者: 滔滔逐浪 | 来源:发表于2022-03-26 16:36 被阅读0次

1,代码实现

 <dependency>
            <groupId>com.aventrix.jnanoid</groupId>
            <artifactId>jnanoid</artifactId>
            <version>2.0.0</version>
        </dependency>

工具类

package com.example.demo.test1;


import java.security.SecureRandom;
import java.util.Random;
 
public final class NanoIdUtils {
    public static final SecureRandom DEFAULT_NUMBER_GENERATOR = new SecureRandom();
    public static final char[] DEFAULT_ALPHABET = "_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
    public static final int DEFAULT_SIZE = 21;
 
    private NanoIdUtils() {
    }
 
    public static String randomNanoId() {
        return randomNanoId(DEFAULT_NUMBER_GENERATOR, DEFAULT_ALPHABET, 21);
    }
 
    public static String randomNanoId(Random random, char[] alphabet, int size) {
        if (random == null) {
            throw new IllegalArgumentException("random cannot be null.");
        } else if (alphabet == null) {
            throw new IllegalArgumentException("alphabet cannot be null.");
        } else if (alphabet.length != 0 && alphabet.length < 256) {
            if (size <= 0) {
                throw new IllegalArgumentException("size must be greater than zero.");
            } else {
                int mask = (2 << (int)Math.floor(Math.log((double)(alphabet.length - 1)) / Math.log(2.0D))) - 1;
                int step = (int)Math.ceil(1.6D * (double)mask * (double)size / (double)alphabet.length);
                StringBuilder idBuilder = new StringBuilder();
 
                while(true) {
                    byte[] bytes = new byte[step];
                    random.nextBytes(bytes);
 
                    for(int i = 0; i < step; ++i) {
                        int alphabetIndex = bytes[i] & mask;
                        if (alphabetIndex < alphabet.length) {
                            idBuilder.append(alphabet[alphabetIndex]);
                            if (idBuilder.length() == size) {
                                return idBuilder.toString();
                            }
                        }
                    }
                }
            }
        } else {
            throw new IllegalArgumentException("alphabet must contain between 1 and 255 symbols.");
        }
    }
}

测试:

package com.example.demo.test1;

import java.util.UUID;

/**
 * @author wangjin
 * @title: Test1
 * @projectName demo
 * @description: TODO
 * @date 2022/3/26 0026 16:31
 */
public class Test1 {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(NanoIdUtils.randomNanoId());
            System.out.println(UUID.randomUUID());
        }

    }
}


结果:

JxOPh3frXiufRgiVMaSxt
493e7d4b-4c38-45e5-885b-2d378f58ecbc
dKJIiuINjzLFGNbH64-UK
9d168842-15de-4982-9937-159f895e8c4e
2z72xeZ3yjv3n7Jn1KHPW
77ba93e2-c7d9-4c6f-9810-368da0eb0006
Iqlkp3W9ET4yMAS_LA6J8
ab747588-d82c-4743-92d8-95fb5c4de539
CysV7aF9iLZbO-b12PN06
1507e7f7-c574-4954-bd70-ea69c26c73ab
uPPlUvP1xittA-7IaAGuK
156b04e4-caa4-4392-80f8-aeccbf620b10
j8mZVZVI_hKBDZeXLZyUI
40515be7-f775-4fb5-bc00-17f8edc5c3c3
puQoNJp8irpBIJ7ACN89t
d01a6c7a-55bc-492f-97b8-f511b179610e
5cZEngygDhJFfRxxiTudj
c26b5d58-f628-4ed8-92dd-c5e96d08fe5c
Sfd-kLyV4as8edOkse6h2
eca373e0-a5e1-469c-8d55-71a1a0715bb4

由此可以看出NanoID相比 它的尺寸小、URL 友好性、安全性和速度都较uuid要更好

相关文章

  • 3, NanoID 和uuid的比较

    1,代码实现 工具类 测试: 结果: 由此可以看出NanoID相比 它的尺寸小、URL 友好性、安全性和速度都较u...

  • 顶级Java才懂的,基准测试JMH

    最近在手写一个ID生成器,需要比较UUID和目前比较流行的 NanoID之间的速度差异,当然也要测一下根据规则自创...

  • vue学习(36)

    知识点 1:使用npm命令查看一个包的所有版本 2:nanoid可以用来生成唯一的id,uuid的迷你版 3:我们...

  • 换掉UUID,NanoID更快更安全!

    前言 UUID 是软件开发中最常用的通用标识符之一。然而,在过去的几年里,其他的竞品挑战了它的存在。 其中,Nan...

  • 换掉 UUID,NanoID 更快、更短、更安全

    原文链接:https://mp.weixin.qq.com/s/7gLxbTsv_VPquJoaLa9T4Q[ht...

  • 通过ipa、dSYM、crash日志等方式查看UUID

    1、查看crash日志的构建UUID 2、查看.ipa包的UUID 3、查看.dSYM文件的UUID

  • UUID用习惯了?NanoID 了解一下?

    UUID? 通用唯一识别码(英语:Universally Unique Identifier,缩写:UUID)是用...

  • nanoid

    nanoid是一个可以生成唯一标识的前端库,使用方式如下: 第一步:下载 第二步文件中引入

  • nanoid

    nanoid 用于 JavaScript 的小型、安全、URL 友好、唯一的字符串 ID 生成器。gitHub官网...

  • 如何生成全局唯一

    uuid UUID由以下几部分的组合:(1)当前日期和时间。(2)时钟序列。(3)全局唯一的IEEE机器识别号,如...

网友评论

      本文标题:3, NanoID 和uuid的比较

      本文链接:https://www.haomeiwen.com/subject/bifsjrtx.html