UUID太长怎么办?快来试试NanoId(Java版本)
一、什么是NanoId
nanoid库和uuid库一样都可以生成唯一识别码 ,但是nanoid相比uuid要更轻量级。
二、怎么使用
引入jar包或使用工具类
<dependency><groupId>com.aventrix.jnanoid</groupId><artifactId>jnanoid</artifactId><version>2.0.0</version></dependency>
工具类
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.");}}
}
三、初体验
public static void main(String[] args) {for (int i = 0; i < 10; i++) {System.out.println(NanoIdUtils.randomNanoId());System.out.println(UUID.randomUUID());}}
DHxVDk6OlUpJv4DMsJBQm
f6a4834d-494d-411f-98c6-aae886d104ec
OITlZuemCDn9CRR0ZruMB
0990b182-127a-44f7-9660-5bf9e8fb232f
GNNdtQaXVCRYgfxPbr1TF
8de0a3f9-5db1-43a9-806f-be95084586d2
BXpOVuLkOGdiu6bwxV34i
c9dbfdab-11a0-454c-b700-55f3556c5335
KB8kXivS0urYqnx_Hs1vp
36775a12-bed3-47f4-b9d9-eecb156079fa
nuTskLmIof63GExt9sduR
b448109f-bad9-473c-a1c5-f3a65f80a698
pJRdALwVBlrVMSuKwEX_z
e252312e-3806-4581-b3b4-842cccf83298
LuH50GGpZGqQz4ny2F7wT
01b846b0-753b-4fcf-97bd-c19bd2368570
qBndTEU1n2KBslPqORc67
a2f828cc-b5cf-4639-b2fe-e674ae0db4b5
vbNaVYd6rqUfbEWpcxrKM
321cc407-e72f-434f-89ce-06c6eec3ff88
四、相比优势
[译] 为什么 NanoID 会取代 UUID - 知乎
空间小、更安全、可以自动以子母表
UUID太长怎么办?快来试试NanoId(Java版本)相关推荐
- 录的视频太长怎么剪切?试试这个剪辑技巧
据说一开始玩抖音的人,都容易痴迷!这不,小北的一个朋友最近就中了抖音的魔,每天睡前都要刷个两三个小时,以前从不爱拍照拍视频的他最近也是什么都喜欢往抖音上分享了!这不,今天朋友拍了一个比较长的视频,觉得 ...
- 快来试试一行java程序看cpu核心数
1.用一行java程序看cpu核心数 package netty.io;public class CountOfCpu {public static void main(String[] args) ...
- 比UUID更快更安全NanoID到底是怎么实现的?(荣耀典藏版)
前言 UUID 是软件开发中最常用的通用标识符之一.然而,在过去的几年里,其他的竞品挑战了它的存在. 其中,NanoID 是 UUID 的主要竞争对手之一. 因此,在本文中,我们将展开讨论 NanoI ...
- CentOS 停止维护,2022年,快来试试这些最佳替代方案!Rocky Linux(每个版本长达十年的支持,强烈推荐)
CentOS 停止维护,2022年,快来试试这些最佳替代方案! 总所周知,CentOS在国内的地位可以说是相当厉害,因为Centos是RHEL(红帽)的再编译版本,而且在RHEL的基础上修正了不少已知 ...
- 微信朋友圈+html+字体,一键修改微信朋友圈字体,快来试试吧
原标题:一键修改微信朋友圈字体,快来试试吧 大家好,我们平时发朋友圈的字体是不是很单调呢,有很多小伙伴喜欢与众不同,最近小编发现有很多朋友发朋友圈的时候,用上了特别个性的艺术字体,今天小编就给大家准备 ...
- socket连接时间太长受什么原因影响?_真全粮多功能酿酒设备-酿酒发酵前期为什么要通风处理?...
用做白酒的设备酿过酒的都知道,发酵会影响白酒的口感,对于酿酒新手来说,怎样管理发酵很关键.谈谈做白酒的设备酿酒时,发酵前期为什么要通风?酿酒师在酿酒时,会在发酵的前三天半密封做一次开放式循环,三天后做 ...
- 事态升级是什么意思_第602期搞笑gif动图:不好意思,腿太长了,来个歪打正着...
1.被迫体验了滑雪的感觉. 2.不好意思,腿太长了,来个歪打正着! 3.不能平衡的平衡车买了有什么用! 4.差点就能靠翻车拿第二了! 5.车跑得太快了我也没想到! 6.导演麻烦把最后剪了吧! 7.翻船 ...
- jwt token 太长_理解 JWT 鉴权的应用场景及使用建议
JWT 介绍 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象 ...
- 太长的sql怎么分析_因为ESR, 我一定要推荐你这款 SQL 神器
经常看我们号的读者,对SQL执行的理解,一定与别人不一样. 别人看到一条SQL,脑子里除了从上到下执行,就不会有别的想法.但是我们的读者肯定不是这样.比如以下这条简单的不能再简单的SQL,聚合求和: ...
最新文章
- RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程(转)
- python增加一列数据计算年龄_无法使用python中的条件计算年龄。得到一个价值
- BZOJ 1132 [POI2008]Tro(极角排序)
- 我的世界一进去就java_我的世界国际java版1.12.2加了光影修复进游戏就直接崩溃...
- Commit failed with error: pathspec 'src/main/java/com/leo/demo/juctest/test.java' did not match any
- 送给“苦逼”的IT人系列1:IT人的“钱”景以及收入的两道坎
- DecExpress 帮助网站
- codeforces 344A-C语言解题报告
- 揭秘丨7分钟看懂华为云鲲鹏Redis背后的自研技术
- 含隐变量模型求解——EM算法
- 番茄时间管理法(Pomodoro Technique):一个番茄是如何让你工作更有效率的
- 谷歌(chrome)浏览器扩展程序
- metasequoia :Summoner
- Android手机清除锁屏密码
- 安装Jdeveloper 12C
- 轻便简洁的电脑录音软件,免费收藏!
- 【C语言】案例二十九 综合案例——体育成绩管理系统
- 两种方法设置 .NET/C# 项目的编译顺序,而不影响项目之间的引用
- Android 11.0 系统Settings去掉开发者模式功能
- 设随机变量用计算机模拟,概率论实验报告1.docx