1. 首页
  2. >
  3. 编程技术
  4. >
  5. PHP

Nanoid - 可能会取代 UUID 的ID产生器

UUID以前开发时用得多了,它很好用,不过,现在有个强力的挑战者:Nanoid。

Nanoid已经可以在多种语言

C#, C++, Clojure and ClojureScript, Crystal, Dart & Flutter, Deno, Go, Elixir, Haskell, Janet, Java, Nim, Perl, PHP, Python with dictionaries, Ruby , Rust, Swift

里使用,下面例子以c#代码编写。

一 安装

Install-Package Nanoid

二 默认使用

for (var i = 0; i < 1000; i++) {                 Console.WriteLine(Nanoid.Generate()); }

生成的结果类似:

FP3q9j_Fp3SiuO8pVTFOC

Mik9f08ZW5GFqcmxcTXP7

SJX7-h5TlLVmuRhAiUzyh

uhwA42IJUtB3z2yOc5PRz

tYBoKqEYRFbzpfoSLq2op

Vih8kh3cIlvzIj-sao8zq

1 默认是以字符集 "
_-0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 生成的21长度的随机字符串

2 默认的随机产生器不是 System.Random ,而是
System.Security.Cryptography.RandomNumberGenerator ,这个产生器比 System.Random 更安全,更随机。但我们也可以继续使用 System.Random:

var myRandom = new Random(100); for (var i = 0; i < 1000; i++) {   Console.WriteLine(Nanoid.Generate(myRandom)); }

3 可以自定义输出结果的长度:

var size = 10; for (var i = 0; i < 1000; i++) {   Console.WriteLine(Nanoid.Generate(size:size)); }

结果类似:

mDazc4R0v5

RjXWpmjil4

8gP9GS1UWD

mr6gHkYWfw

8vfT_q0YQe

wr9Ib_85u1

UxvufAFutf

ckm0ahMxI8

4 可以自定义字符集:

var myChars="ABCD1234"; for (var i = 0; i < 1000; i++) {   Console.WriteLine(Nanoid.Generate(myChars)); }

结果类似:

BB1D4B131342B34C3CA2D

24D2B12BA34BDCABC3AB3

C2AD1DC1C43BABBACB443

D3B2411AD1AD2BDD1A1AB

DCDB2432CCADD2AB2DDCB

1CA433DDDDCB22A11B3B1

13232D34D4B14DAA2AD4C

三 Nano的优点和缺点

  • 快速。javascript的版本据说比 uuid 快 60%
  • 紧凑。Nanoid 21字符,UUID 32字符。
  • 自定义字符。
  • 没有第三方依赖。
  • URL友好。
  • 更安全。不再使用系统的System.Random(JS:Math.random)
  • 缺点还是一样:不是顺序的,作为数据库列时做索引有不利影响。