什么是检查随机字符串I've生成了has't是我以前生成的

What is the quickest way to check that the random string I've generated hasn't been generated by me before?

本文关键字:has ve 随机 检查 字符串 什么      更新时间:2023-09-26

我很好奇像imgur这样的地方(通过一个唯一的5位数引脚识别每个图像)是如何实现这一点的。很明显,一个人至少会有一个O(n)解决方案(或者根据算法,最多有O(n log (n))),但由于我预计n将是数百万,这将是一个不可行的解决方案。

imgur很可能在数据库中使用"autonumber"主键。这种密钥中的数字保证是唯一的;它们按顺序分配,并且永远不会被重用(即使它们标识的记录已被删除)。

您可以将这些数字任意组合,包括imgur使用的字母数字组合。一种方法是使用基数为36的编码器,对于数字12345678,该编码器将返回

7CLZI

在Javascript中很容易做到:

(1234567890).toString(36)  // => "kf12oi"
parseInt("kf12oi",36) // => 1234567890

尽管您很可能会在服务器上进行这些转换,而不是在浏览器中。

base58,将获得大写和小写字母以及数字:

15FsU

另请参阅
http://convertxy.com/index.php/numberbases/

您可以使用顺序数字键,然后使用乘法逆变换。然后,以64为基数对其进行编码以获得字符串。

好的是,恢复密钥很容易:基于64的解码,再次进行乘法逆运算,就有了密钥。

这可以通过http://en.wikipedia.org/wiki/Bloom_filter.这是一个非常有效的算法。它确实有少量假阳性的缺点。

我不确定这里是否有正确的结尾,但假设你想生成一个随机字符串,然后存储它来访问一些东西,你只需要检查它是否在你的存储中。

如果您有一个SQL数据库表,在字符串上有一个唯一的索引,您可以尝试插入。如果插入失败是由于重复的唯一密钥,你会知道你用过它。这几乎是即时的。