我想创建一个唯一的 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')));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)