我正在尝试编写一个PHP函数,它将生成“所谓的”随机字符串,无论运行的次数如何,都需要是唯一的。好吧,它可以运行不止一次,但最好不要多次。
例如,当您将图像上传到imgur时,它会生成一个随机的5个字母[a-zA-Z]字符串。如果我想复制它(在MySQL数据库中存储带有唯一KEY的字符串),而不必重复选择并确保密钥不存在是否有任何方法? 同时,随机的重要性确实存在,所以我宁愿不去1,2,3(aaaaa,aaaab,aaaac),因为这会完全消除对随机性的需求。
我知道有52 ^ 5种不同的可能性,但仅用于教育目的(以及未来的算法编写),是否有一种有效的方法来生成这些“独特的”“随机”字符串?
[编辑]据我所知,独特+随机(基本上)是不可能的。但有什么方法可以生成独特的,非显而易见的字符串?谢谢danishgoel!
答案 0 :(得分:1)
当您随机生成任何数据时,您无法保证唯一性。
您只有生成重复项的概率,具体取决于随机化算法和随机数据的可能性。
通常情况下,这一点非常低。
但是如果你想保证唯一性,你有两种方法:
IP Address of requester
和request time
保证生成唯一数据,因为两个用户在同一时间不能拥有相同的IP地址答案 1 :(得分:0)
这依赖于时间,因此极不可能带来重复。
$randString = date("Ymdhis") . rand(10000, 99999);
虽然有点长。
答案 2 :(得分:-2)
我发现一种简单的方法:
$charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$rand_str = '';
$desired_length = 10;
while(strlen($rand_str) < $desired_length)
$rand_str .= substr(str_shuffle($charset), 0, 1);
......或......
$desired_length = 10;
echo base64_encode(openssl_random_pseudo_bytes($desired_length));