1

我希望能够创建一个算法来生成一个 6 个字符的确认代码(例如 A1JU2Z),这对于给定的(用户、代码)对来说是唯一的。原因是,我想将代码保留为 6 个字符,但使用一组修剪过的字母数字(以避免与 1 和 I 等混淆)仅允许在发生冲突之前约 3 亿个代码。当然,我可能永远不需要 3 亿个代码,但如果我这样做了,回去修复这个问题将是一个巨大的痛苦。

那么有没有办法利用用户......说他们的用户名,通用唯一代码,这样如果同一个用户想要生成另一个代码,它保证它对他们来说是唯一的?(这当然是假设单个用户不会生成超过 300 个工厂代码)

谢谢!

4

2 回答 2

1

如果 ID 仅对当前用户唯一,则可以随机生成 ID 的每个字符。只要不期望用户生成大量此类 ID,您就有合理的机会不会多次生成相同的 ID(您需要进行一些数学运算以获得预期碰撞机会的确切数字,因为生成的 ID 数量增长)。

如果您必须不惜一切代价避免发生冲突,您需要保留所有先前生成的 ID 并为新的 ID 进行比较,或者保留生成的 ID 的计数(这需要一个方案,其中 ID 生成是基于计数,但也是独一无二的——一个非常简单的例子是{ID=count; ++count;}

于 2012-05-23T13:32:01.443 回答
0

我认为您可以使用这样的简单密码生成器:http ://www.webtoolkit.info/php-random-password-generator.html

结合检查算法以确保它尚未被使用。

$pass=generate_password();
$found=find_password($pass);
while($found){
    $pass=generate_password();
    $found=find_password($pass);
}
save_password($user,$code,$pass);

generate_password() 是链接中引用的函数。find_password() 是一个你必须编写的函数来检查数据库中已经生成的代码。save_password() 是您必须编写的一个函数,用于将生成的代码存储在数据库中。

代码在 PHP 中,但逻辑在这里。链接中的密码生成器很容易理解,你可以得到 6 个字符长,有你想要的字符规则。

于 2012-05-23T13:10:39.073 回答