为字符串值生成可重用的唯一代码

时间:2019-05-08 10:18:19

标签: c# hash

我有一个SQL表,存储的唯一nvarchar数据设置为最多 60个字符

我现在需要每天将每个值输出到文件中。然后,该文件将被送入第三方系统。

但是,此第三方系统要求该值限制为 10个字符。这些值不必是表中的值。它们只需要唯一且最多10个字符即可。它们还必须保持一致,因为每天对于表值使用相同的唯一ID。

我无法截断字符串,因为它可能会失去其唯一性。

看看我的选择,我可以:

  1. 使用GetHashCode()
  2. 转换为十六进制

使用 GetHashCode ,这看起来是一个简单明了的选项,每次运行它都会得到相同的值。但是,Microsoft文档建议不要出于我的目的使用它...

https://docs.microsoft.com/en-us/dotnet/api/system.string.gethashcode?redirectedfrom=MSDN&view=netframework-4.8#System_String_GetHashCode

  

因此,永远不要在创建哈希码的应用程序域之外使用哈希码,永远不要将哈希码用作集合中的关键字段,并且永远不要保留哈希码。

通过十六进制转换,当修剪成10个字符时,它也可能失去唯一性。

我也看了这个例子,但我不确定它具有唯一性是否可靠:A fast hash function for string in C#

static UInt64 CalculateHash(string read)
{
    UInt64 hashedValue = 3074457345618258791ul;
    for(int i=0; i<read.Length; i++)
    {
        hashedValue += read[i];
        hashedValue *= 3074457345618258799ul;
    }
    return hashedValue;
}

我还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

向表中添加唯一的身份密钥,然后让SQL Server为您管理增量。如果需要的话,可以使用大量种子。