PHP中的短唯一ID

我想创建一个唯一的ID,但uniqid()给出类似的信息'492607b0ee414'。我想要的是与tinyurl提供的类似的东西:'64k8ra'。越短越好。唯一的要求是,它不应具有明显的顺序,并且应比看似随机的数字序列更漂亮。字母优先于数字,理想情况下,字母不能混合使用。由于条目数量不会那么多(最多10000个左右),因此碰撞的风险并不是一个很大的因素。

任何建议表示赞赏。

回答:

制作一个小函数,该函数返回给定长度的随机字母:

<?php

function generate_random_letters($length) {

$random = '';

for ($i = 0; $i < $length; $i++) {

$random .= chr(rand(ord('a'), ord('z')));

}

return $random;

}

然后,您将需要使用伪代码来调用它,直到它唯一为止,具体取决于您将信息存储在何处:

do {

$unique = generate_random_letters(6);

} while (is_in_table($unique));

add_to_table($unique);

您可能还想确保字母在词典中不构成单词。可能是整个英语词典,或者只是一个坏词词典,以避免客户发现不良口味。

编辑:我也只会在您打算使用它时才有意义,因为它不是用于大量物品,因为您遇到的冲突越多(获取表中已有的ID),它的速度可能会变得很慢。当然,您需要索引表,并且需要调整ID中的字母数以避免冲突。在这种情况下,如果有6个字母,您将有26

^ 6 = 308915776可能的唯一ID(减去错误词),足以满足您的10000个需求。

编辑:如果您想要字母和数字的组合,可以使用以下代码:

$random .= rand(0, 1) ? rand(0, 9) : chr(rand(ord('a'), ord('z')));

以上是 PHP中的短唯一ID 的全部内容, 来源链接: utcz.com/qa/417731.html

回到顶部