javascript - 如何生成只有 7 个字符的 UID 并排除像 imgur.com 这样的重复

标签 javascript php algorithm

看看这个 URL:http://imgur.com/JLhIuYt

你会看到这个URL有一个看似随机的字符串生成,它是由7个字符组成的

  1. 小写字母(26 个字符)
  2. 大字母(26 个字符)
  3. 数字(10 个数字)

n = (26+26+10) = 62

我想知道如何生成一个只有 7 个字符的随机字符串,作为 GUID。

imgur 使用的只有 7 个字符,它们可以生成 3.521.614.606.208 种变体(62 的 7 次方)。现在的问题是,imgur 如何处理用作标识符的每个变体,因为这些数字似乎是随机生成的。

有没有办法找出如何使用 7 个字符作为 UID 并确保它们不会重复?

一个解决方案可能是,以 block 的形式生成它们并一个接一个地使用。好像不太好。

任何形式的赞赏!

顺便说一句。 最好用 PHP 生成随机字符串

最佳答案

您可以使用这个单行代码生成一个随机字符串:

substr(
    str_shuffle(
        str_repeat('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', 7)
    ), 
    0, 
    7
)

然后,您可以检查数据库是否已被使用,例如:

while(
    existsInTheDB(
        $str = substr(
            str_shuffle(
                str_repeat(
                    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
                    7
                )
            ), 
            0, 
            7
        )
    )
){}

//now you can use $str

关于javascript - 如何生成只有 7 个字符的 UID 并排除像 imgur.com 这样的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25607418/

相关文章:

algorithm - 这种用于 URL 缩短器的混淆算法是否有效?

javascript - DOMParser.parseFromString(text ,"text/html") 仅解释前 ~21,500 字节。这是一个错误吗?

javascript - Browserify 分离 libs.js 和 app.js 导致 Backbone 找不到 jQuery

php - 根据 mysql 查询显示某些代码? (php)

php - undefined variable : POST - PHP and MySQL

algorithm - 子集求和算法

c++ - 计算使用 C++ std 函数而不是 for 循环的 Big O

javascript - Bootstrap 3 固定顶部导航栏

javascript - 滑动效果不适用于 "ul"元素中的第一个选项卡

php - 使用准备好的语句更新记录,检查更新是否有效