从PHP中的字符串创建一个唯一的4字节整数


Create a unique 4-byte Integer number from a String in PHP

我有一个SQL表,它使用字符串作为键。我需要使用PHP将该字符串(最多18个字符)转换为唯一的(!)4字节整数。有人能帮忙吗?

唯一?不可能,抱歉

让我们仔细看看:

对于18个字符,即使我们假设ASCII(7位)只有128个可能的字符,你也会得到128^18个可能的字符串(我甚至不讨论更短字符串的可能性!),大约是8E37(8和37个零)。

对于一个4字节的整数,你会得到256^4个可能的整数,大约是4E9(40亿)。

所以,你的字符串比你的整数多4E28;不能有唯一的映射。

因此,一旦输入4294967297键,肯定会遇到碰撞,但一旦输入多个键,也可能会遇到碰撞。

另请参阅:http://en.wikipedia.org/wiki/Pigeonhole_principle

保留一个字符串到整数的查找表。每次遇到新字符串时,您都会将其添加到映射表中,并为其分配一个新的唯一ID。这将适用于大约2^32个字符串,这可能已经足够了。

对于超过2^32个不同的字符串,没有办法做到这一点。

你不能。一个四字节的整数可以表示2^32=40亿个值,这不足以容纳目标空间。

如果当前表中的行数少于40亿,则可以创建一个只为每个行分配一个增量值的交叉表。使用这种方法,您将被限制为40亿行,但这可能适合您的情况。