一、简介
一个小巧、安全、URL友好、唯一的 JavaScript 字符串ID生成器。
“一个惊人的无意义的完美主义水平, 这简直让人无法不敬佩。”
- 小巧. 130 bytes (已压缩和 gzipped)。 没有依赖。 Size Limit 控制大小。
- 快速. 它比 UUID 快 60%。
- 安全. 它使用加密的强随机 API。可在集群中使用。
- 紧凑. 它使用比 UUID(
A-Za-z0-9_-
)更大的字母表。 因此,ID 大小从36个符号减少到21个符号。 - 易用. Nano ID 已被移植到 20种编程语言。
import { nanoid } from 'nanoid'
model.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT"
支持现代浏览器、IE 使用 Babel、Node.js 和 React Native。
二、Java 中的 NanoId
(1)概述
- Java的唯一字符串ID生成器。
- 安全:NanoID使用Java的SecureRandom生成具有适当字符分布的加密强随机id。
- 简短:JNanoID生成只有21个字符的紧凑id。通过使用比UUID更大的字母,JNanoID可以生成更多的唯一id,与UUID相比,使用更少的字符(21对36)。
- URL友好:JNanoID使用url友好的字符(A-Za-z0-9_-)。完美的唯一标识符在web应用程序。
- 可定制化:JNanoID是完全可定制的。所有默认选项都可能被重写。提供你自己的随机数生成器,字母,或大小。
- 可测试:使用JUnit对JNanoID进行了全面测试。
(2)引入依赖
① Maven 引入
<dependency>
<groupId>com.aventrix.jnanoid</groupId>
<artifactId>jnanoid</artifactId>
<version>2.0.0</version>
</dependency>
② Gradle 引入
compile 'com.aventrix.jnanoid:jnanoid:2.0.0'
(3)用法示例
JNanoId提供了一个易于使用的实用程序类(NanoIdUtils),其中包含两个生成id的方法。
① 标准id - randomNanoId()
- 默认方法创建安全的、url友好的、唯一的id。
- 它使用一个url友好的字母(a- za -z0-9_-),一个安全的随机数生成器,并生成一个具有21个字符的唯一ID。
② 自定义id - NanoIdUtils.randomNanoId(随机、字母、大小);
另一种方法:允许您通过指定自己的随机数生成器、字母或大小来生成自定义id。
public static void main(String[] args) {
// Use a faster, but non-secure, random generator
Random random = new Random();
// Use a custom alphabet containing only a, b, and c
char[] alphabet = {'a', 'b', 'c'};
// Make IDs 10 characters long
int size = 10;
String id = NanoIdUtils.randomNanoId(random, alphabet, 10);
System.out.println("nanoid: " + id);// aacaaaabca
}
三、扩展
(1)其他语言的 NanoId
- C#
- Clojure and ClojureScript
- Crystal
- Dart
- Go
- Elixir
- Haskell
- JavaScript
- Nim
- PHP
- Python
- Ruby
- Rust
- Swift
另外,还有一个CLI工具可以从命令行生成id。
(2)nanoid-cli
一个围绕nanoid的小型cli包装器,用于从命令行生成惟一的id。
# 默认用法
$ nanoid
eftOYF0ie93F_yVhkOBcM
# 参数选项
--alphabet, -a Use a different alphabet to generate the id
--size, -s Generate an id of a different size
# 示例1:默认生成规则(长度为ID)
$ nanoid
sBiU98ZmAHvICIOnUoxOW
# 示例2:限定生成ID的长度
$ nanoid --size 32
xgX77wBFcY1lso9R12Y2lHrluUbLjAPV
# 示例3:限定字符范围集中生成随机ID
$ nanoid --alphabet "_~0123456789abcdefghijklmnopqrstuvwxyz"
6me9uz2j_blasac~0p5as