PHP中的短唯一ID
我想创建一个唯一的ID,但uniqid()
给出类似的信息'492607b0ee414'
。我想要的是与tinyurl提供的类似的东西:'64k8ra'
。越短越好。唯一的要求是,它不应具有明显的顺序,并且应比看似随机的数字序列更漂亮。字母优先于数字,理想情况下,字母不能混合使用。由于条目数量不会那么多(最多10000个左右),因此碰撞的风险并不是一个很大的因素。
任何建议表示赞赏。
回答:
制作一个小函数,该函数返回给定长度的随机字母:
<?phpfunction 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