我正在构建一个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
我错过了什么,或者有更好的方法来做我需要的事情吗?