有没有什么生成随机不重复的唯一 ID 且足够短的好办法?

2020-10-16 00:46:30 +08:00
 kaiki
B 站的 bv 号那种就感觉可以,但是太长,我想生成只有几位的数字+大小写字母组合的随机字符表作为 ID,但是怕万一随机出以前出过的 ID
9847 次点击
所在节点    问与答
67 条回复
JCZ2MkKb5S8ZX9pq
2020-10-16 19:07:35 +08:00
看了楼上的思路,忽然想到固定排列组合+伪随机,自定义个种子,是不是也可以?
xcatliu
2020-10-16 19:12:24 +08:00
最近发现的一个 star 很多的 https://github.com/ai/nanoid,看了下功能很全,比如可以自定字典和长度:

```js
import { customAlphabet } from 'nanoid'
const nanoid = customAlphabet('1234567890abcdef', 10)
model.id = nanoid() //=> "4f90d13a42"
```
phithon
2020-10-16 19:26:14 +08:00
看到楼上有提到 hashids 的了
https://hashids.org/
dreasky
2020-10-16 20:27:41 +08:00
black11black
2020-10-17 00:53:45 +08:00
@wyz123723
@unixeno
@newtype0092
不是概率小不小的问题,我觉得你作为设计者,当然不可能允许设计范围内存在一种小概率情况让程序不知道怎么处理,设计外情况当然不算在内,电位异常不是你能控制的,但你能控制的范围内你肯定要处理,所以我就问碰撞了怎么处理,楼上有人也说过了碰撞了就重随机这种简单答案,或者有人说用 sha256 可以基本避免恶意设计碰撞,这都是解决方案,你有方案就贡献方案,没方案就不回,没什么必要杠来杠去的。

再说你真设计一个系统,你当然要考虑设计安全性,像我说的你如果完全没有碰撞处理方案,那随便一个人稍微有点恶意,传了经过设计的特殊字串,就能让你的程序抛出异常,这是完全有可能发生的情况而不是什么极小概率事件,显然设计过系统的都没法接受。也不知道现在杠精这么多都在杠什么,如果你们写程序的时候就真不加碰撞处理的代码,那我们也不用讨论什么了,道不同不相为谋,没必要
Deepseafish
2020-10-17 10:19:34 +08:00
@black11black 「或者有人说用 sha256 可以基本避免恶意设计碰撞,这都是解决方案」
这不按照你的逻辑还是没有考虑碰撞的情况吗?这不等于还是在说碰撞概率低,怎么就又是解决方案了。
black11black
2020-10-18 02:15:31 +08:00
@Deepseafish 尝试跟杠精讨论是我的错,block 了不用回了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/715424

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX