0

如何从PHP中的给定数据生成具有固定长度的唯一数值?例如,我可以有一个包含数字和字符的字符串,我需要生成长度为 6 的唯一数值。谢谢!

4

2 回答 2

2

您将无法使用任何算法从输入中生成唯一的数值。这就是将输入转换为伪随机输出的问题。如果你有一个 20 个字符的输入字符串和一个只有 6 个字符的输出,就会有重复的结果,因为:

输入 20 个字符(假设有 58 个字母数字可能性):

58^20 = 1.8559226468222606056912232424512e+35 possibilities

输出 6 个字符(假设有 10 个数字可能性):

10^6 = 1000000 possibilities

因此,总而言之,您将无法从 string 中生成唯一数字。您最好的机会是使用像md5sha1这样的散列函数。它们是字母数字的,但您始终可以将它们转换为数字。但是,一旦将它们裁剪为 6 位数,它们被重复的机会就会大大增加。

于 2012-11-03T19:29:28.097 回答
0

不幸的是,给定一个字符数有限的任意值,不可能生成一个完全唯一的值。有无数个可能的值,而长度为 6 的数值只有 999999 个可能的值。

然而,在 PHP 中,您可以执行以下操作:

$list_of_numeric_values = array();

foreach ($list_of_given_values as $value)
{
     if (!in_array($value, $list_of_numeric_values))
         $list_of_numeric_values[] = $value;
}

完成后,数组将为您可以使用的每个可能值提供一个唯一键。

如果您不需要同时计算所有这些,您可以遵循类似的算法,而不是仅使用 PHP“搜索”数组,也许它是 MySQL 表上的一个 SELECT 以查看条目当前是否存在,并使用自动增量的主键来获得你的价值。

于 2012-11-03T19:28:58.937 回答