Php 从字符串创建数字哈希/ID的最佳方法?

Php 从字符串创建数字哈希/ID的最佳方法?,php,mysql,hash,Php,Mysql,Hash,我正在用一个表构建一个MySQL数据库,该表将存储很多行(比如,像1.000.000)。 每一行都有一个数字ID,但我不想使其递增,而是必须从唯一的字符串生成 例如,用户ABC将在时间123创建新元素,因此原始字符串将为“ABC-123”。PHP函数将把它“翻译”成一个数字。 这样,我将来就有可能从同一对数据中重新生成相同的ID。或多或少将其视为Java hashCode()函数 我发现这个函数可以将字符串“转换”为数字: function hashCode($string) { ret

我正在用一个表构建一个MySQL数据库,该表将存储很多行(比如,像1.000.000)。 每一行都有一个数字ID,但我不想使其递增,而是必须从唯一的字符串生成

例如,用户ABC将在时间123创建新元素,因此原始字符串将为“ABC-123”。PHP函数将把它“翻译”成一个数字。 这样,我将来就有可能从同一对数据中重新生成相同的ID。或多或少将其视为Java hashCode()函数

我发现这个函数可以将字符串“转换”为数字:

function hashCode($string) {
    return base_convert(substr(md5($string), 0, 16), 16, 10);
}
我对此有些怀疑。首先,它从创建一个长度为32个字符的md5哈希开始,然后将其切割为16个字符。这是一个明显的数据缺乏,所以这怎么可能是一个独特的哈希

其次,生成的16位数字从base-16转换为base-10,因此最大值为
18446744073709552046
。存储此数字的MySQL列具有
UNSIGNED BIGINT
数据类型,因此最大值为
18446744073709551615
。这还不够

18446744073709551615 - 18446744073709552046 = -431

我是否遗漏了什么,或者是否有更好的方法来满足我的需求?

为什么不直接使用自动增量?这会带来什么影响?原因写在第二段:“这样,我将来就有可能从同一对数据中重新生成相同的ID”。对于autoincrement,我没有关于示例字符串“ABC-123”与生成的autoincrement值之间的链接的信息before@alessandro.francesconi尝试搜索MYSQL增量函数/过程有很多不同的方法(已经有了)。这取决于您选择其中的一些并定制它以满足您的需求。那么为什么不使用“ABC-123”作为主id呢?性能/空间原因:存储字符串作为主键比存储数字更糟糕