我有由字母、数字和特殊字符(电子邮件地址)组成的唯一可变长度字符串列表。列表中的每个电子邮件地址都是唯一的。
我需要一个单向哈希函数(我不需要能够从生成的数字中检索原始值),它会用盐对字符串进行哈希处理并生成一个 12 位数字。
我想确保唯一性,所以我将检查以前生成的值列表以检测冲突,然后在发生冲突时生成一个新数字。可预测性不是问题。
理想情况下,我希望这个函数用 Groovy 编写,但 Java 也可以。
最佳答案
I need to guarantee that each generated number will be unique.
嗯,这显然会成为一个问题。可能的输入字符串多于可能的输出值。特别是,每个可能的输出值(一个 12 位数字的字符串)都是一个可能的输入值。因此,如果所有这些都获得唯一的输出值,则不可能为任何其他输入值留下任何输出值。
当然,您始终可以记录您遇到的每个电子邮件地址(因此第一个以 000000000000 结尾,第二个以 000000000001 结尾,等等),但这是一个存储问题,而不是散列本身。如果没有后备存储,您无法仅从输入中获取输出。
关于java - 在 Groovy 中将可变长度字符串散列为 12 位数字的一种方法函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10623500/