我正在寻找创建一个可重用的函数,它将生成一个随机密钥,其中包含所选长度的可打印ACSII字符(从2到1000+不等).我认为可打印的ASCII字符是33-126.它们的键不需要是完全唯一的,只要在完全相同的毫秒时生成就是唯一的(因此uniqid()不起作用).
我正在考虑组合chr()并mt_rand()可能有效.
这是要走的路,还是其他最好的方法?
编辑: uniqid()也不会工作,因为它没有长度参数,它只是PHP给你的东西.
我的想法:这就是我想出的:
function GenerateKey($length = 16) {
$key = '';
for($i = 0; $i < $length; $i ++) {
$key .= chr(mt_rand(33, 126));
}
return $key;
}
Run Code Online (Sandbox Code Playgroud)
这有什么问题吗?
另一个编辑:大多数其他问题涉及密码生成.我希望有一个更广泛的角色,我不关心1VS l.我想要可能的最大数量的键.
注意:生成的密钥不一定必须是加密安全的.
我正在寻找生成随机/唯一字符串的最短方法,为此我使用了以下两个:
$cClass = sha1(time());
Run Code Online (Sandbox Code Playgroud)
要么
$cClass = md5(time());
Run Code Online (Sandbox Code Playgroud)
但是,我需要字符串以字母字符开头,我正在查看base64编码,但最后会添加==,然后我需要摆脱它.
用一行代码实现这一目标的最佳方法是什么?
更新:
PRNDL提出了一个很好的建议,我最终使用它,但有点修改
echo substr(str_shuffle(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ),0, 1) . substr(str_shuffle(aBcEeFgHiJkLmNoPqRstUvWxYz0123456789),0, 31)
Run Code Online (Sandbox Code Playgroud)
将产生32个字符来模仿md5哈希,但它总是会产生第一个字母字母,就像这样;

然而,Uours真的改进了他的答案;
substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 1).substr(md5(time()),1);
Run Code Online (Sandbox Code Playgroud)
更短,更甜
Anonymous2011的另一个建议非常棒,但由于某种原因,第一个角色总是要么M,N,Y,Z所以不适合我的目的但是会选择答案,顺便说一下有谁知道为什么它会总是产生那些特定的字母?
这是我修改版本的预览
echo rtrim(base64_encode(md5(microtime())),"=");
Run Code Online (Sandbox Code Playgroud)

你如何生成密码?
像这样的东西?
cat /dev/urandom | strings
Run Code Online (Sandbox Code Playgroud) 我知道这可能看起来很傻,但我想生成一个8个characetrs的随机代码,只使用php的数字或字母.我需要这个为每个注册的用户生成一个密码,谢谢
我知道uniqid()创建大量长度为 7 或更长的唯一 id 的方法,但我想要创建的是长度为 5 的唯一 id,不会发生冲突。
是否可以创建 220.000 个长度为 5 的唯一 id 并检查是否存在冲突?