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 生成器的主要内容,如果未能解决你的问题,请参考以下文章
ID vs Unique ID vs Client ID vs Unique ClientID vs Static ClientID?