gpt4 book ai didi

php - 生成长度为 7 个字符的唯一随机字母数字字符

转载 作者:可可西里 更新时间:2023-11-01 06:45:25 25 4
gpt4 key购买 nike

它不需要是有意义的词——更像是随 secret 码生成,但要注意的是——它们应该是唯一的。我将把它用于某种包/产品代码。哪种方法最好? :)

最佳答案

通常不可能生成同时包含唯一元素和随机元素的序列:显然,要确保唯一性,算法必须考虑序列中先前生成的元素,因此接下来的元素不会真正随机。

因此,您最好的选择是检测碰撞并重试(在您的特定情况下这可能非常昂贵)。

如果您被限制在 7 个字符以内,那么上面您无能为力:

$allowed_chars = 'abcdefghijklmnopqrstuvwxz';
$allowed_count = strlen($allowed_chars);
$password = null;
$password_length = 7;

while($password === null || already_exists($password)) {
$password = '';
for($i = 0; $i < $password_length; ++$i) {
$password .= $allowed_chars{mt_rand(0, $allowed_count - 1)};
}
}

这最终会为您提供一个新密码。

但是,在我遇到的类似情况下,我通常会选择更大的密码大小,这也恰好是流行的哈希函数(例如 md5)的十六进制表示的大小。然后你可以让自己更轻松,更不容易出错:

$password = time(); // even better if you have some other "random" input to use here

do {
$password = md5(time().$password);
}
while (already_exists($password));

这还有一个额外的好处,即序列空间更大,因此冲突更少。您可以根据将来生成的预期密码数量来选择哈希函数的大小,以“保证”低冲突概率,从而减少对可能昂贵的 already_exists 的调用。功能。

关于php - 生成长度为 7 个字符的唯一随机字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2799495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com