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

时间:2015-11-26 11:34:10

标签: php mysql hash

我正在构建一个MySQL数据库,其中包含一个存储 lot 行的表(例如,如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

我错过了什么,或者有更好的方法来做我需要的事情吗?

0 个答案:

没有答案