如何从PHP中的给定数据生成具有固定长度的唯一数值?

时间:2012-11-03 19:19:44

标签: php algorithm

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

2 个答案:

答案 0 :(得分:2)

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

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

58^20 = 1.8559226468222606056912232424512e+35 possibilities

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

10^6 = 1000000 possibilities

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

答案 1 :(得分: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来查看条目当前是否存在,并使用主键的自动增量以获得您的价值。