NanoID - 轻量、安全的 Unique ID 生成器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NanoID - 轻量、安全的 Unique ID 生成器相关的知识,希望对你有一定的参考价值。

参考技术A 一个小巧、安全、URL友好、唯一的 javascript 字符串 ID 生成器。

支持现代浏览器、IE 使用 Babel 、Node.js 和 React Native。

Nano ID 与 UUID v4 (基于随机) 相当。它们在 ID 中有相似数量的随机位(Nano ID 为126,UUID 为122),因此它们的冲突概率相似::

Nano ID 和 UUID v4之间有三个主要区别:

测试配置: ThinkPad X1 Carbon Gen 9, Fedora 34, Node.js 16.10.

Nano ID 提供 ES 模块:

Nano ID 有 3 个 API:正常(阻塞)、异步、和不安全。默认情况下,Nano ID 使用 URL 友好的符号( A-Za-z0-9_- )并返回一个有21个字符(类似 UUID v4 的冲突概率)的 ID 。

使用 Nano ID 最安全、最简单的方法。在极少数情况下,噪声收集时可能会阻止 CPU 执行其他工作用于硬件随机发生器。

如果你想要减小 ID size(但是会增加冲突概率),可以将 size 作为参数传递。

customAlphabet 允许您使用自己的字母表创建 nanoid 和 ID size。

customRandom 允许您创建一个 nanoid 并替换字母表和默认的随机字节生成器。

在此示例中,使用基于种子的生成器:

random 回调必须接受数组大小并返回随机数的数组。如果要使用与 customRandom 相同的URL友好符号, 你可以使用 urlAlphabet 获取默认字母表。

异步和非安全 API 不适用于 customRandom 。

目前还没有将 nanoid 用于 React key prop 的正确方法
因为它在不同的渲染中应该是一致的。

您应该尝试在列表项中找到稳定的 id。

如果您没有稳定的 ID,您最好使用索引作为 键 而不是 nanoid() :

React Native 没有内置的随机生成器。下面的 polyfill 适用于普通 React Native 和从 39.x 开始的 Expo。

在 PouchDB 和 CouchDB 中,ID 不能以下划线 _ 开头。需要一个前缀来防止这个问题,因为 Nano ID 可能在默认情况下使用 _ 作为 ID 的开头。在默认情况下,在 ID 的开头使用 _ 。

用下面的选项覆盖默认的 ID。

可以通过调用 npx nanoid 在终端获得唯一的 ID。

如果你想改变字母或 ID size,应该使用 nanoid-cli 。

Nano ID 已被移植到许多语言。 你可以使用下面这些移植,获取在客户端和服务器端相同的ID生成器。

mysql unique key

create table b1(id int,name char unique)这样name字段就唯一了

或者create table b1(id int,name char,unique(id),unique(name))这种写法也行

这两种就是单列唯一

create table b1(id int,name char,unique(id,name))

这样就是联合唯一了,就是数据里面的id,name字段两个合起来完全一样

以上是关于NanoID - 轻量、安全的 Unique ID 生成器的主要内容,如果未能解决你的问题,请参考以下文章

NanoID — UUID 的替代品

UUID 正在被 NanoID 取代。。。

unique_ptr 线程安全吗?

循环中的节点 JS 回调

ID vs Unique ID vs Client ID vs Unique ClientID vs Static ClientID?

从 java 代码访问 Apache 的 unique_id