如何在.Net中的一组唯一字符串中创建保证唯一哈希值?

时间:2017-09-19 17:12:07

标签: c#

我正在寻找有关在.Net C#中使用的查找或创建哈希算法的建议。

我有一个DB的列集合。 保证生成表格中的列组合 独特的字符串。

考虑:

String Column1 = "StringA";
String Column2 = "StringB";
String Column3 = "StringC";

我将列连接成一个字符串:

String ColumnKey = Column1 + Column2 + Column3;

目前我正在使用字符串类中的内置.Net C#哈希函数。

int hashKey = ColumnKey.GetHashCode();

在做了一些阅读之后,我的理解是(尽管概率非常低),这种算法并不能保证唯一性。我的理解是,这个函数可以在不同版本的.Net Framework中为相同的字符串产生不同的结果。

我正在寻找另一种哈希算法,以保证唯一性,并在.Net的不同版本中产生一致的结果。

有人可以帮助我开始正确的方向吗?

2 个答案:

答案 0 :(得分:4)

这是不可能的。 int有2 ^ 32个不同的值,只有几个字符长的字符串有更多可能的值。因此,没有散列算法可以保证每个字符串的唯一值。

参见PigeonHole原则。 https://en.wikipedia.org/wiki/Pigeonhole_principle

如果您希望每个版本的.Net都有保证的哈希值,请自行实现哈希值。 A fast hash function for string in C#举了几个例子。我会把它放在string的扩展方法中。

答案 1 :(得分:1)

没有“保证唯一哈希”这样的东西。哈希有一个大小(在.NET 32位),所以只有40亿可能的哈希。有更多的字符串,你发生碰撞。

所以你要求的是不可能的。