C#中的SqlServer校验和

And*_*res 10 c# sql-server checksum

我在sql server 2008 R2中使用chechsum函数,我想在C#app中获得相同的int值.在c#中是否有任何等效的方法返回像sql checksum函数这样的值?感谢名单

Dan*_*Dan 14

在SQL Server论坛上,在此页面上说明:

SQL Server中的内置CHECKUM函数基于一系列4位左旋转xor运算.有关 更多说明,请参阅此帖子.

我能够将BINARY_CHECKSUM移植到c#,它似乎正在工作......我稍后会看看普通的CHECKSUM ......

private int SQLBinaryChecksum(string text)
{
    long sum = 0;
    byte overflow;
    for (int i = 0; i < text.Length; i++)
    {
        sum = (long)((16 * sum) ^ Convert.ToUInt32(text[i]));
        overflow = (byte)(sum / 4294967296);
        sum = sum - overflow * 4294967296;
        sum = sum ^ overflow;
    }

    if (sum > 2147483647)
        sum = sum - 4294967296;
    else if (sum >= 32768 && sum <= 65535)
        sum = sum - 65536;
    else if (sum >= 128 && sum <= 255)
        sum = sum - 256;

    return (int)sum;
}
Run Code Online (Sandbox Code Playgroud)

  • 如何实现它以处理像 CHECKSUM(col1, col2, col3) 这样的少数字符串? (2认同)

Mat*_*son 3

CHECKSUM文档没有透露它如何计算哈希值。如果您想要一个可以在 T-SQL 和 C# 中使用的哈希,请从HashBytes支持的算法中进行选择

  • 这太糟糕了,我一直在寻找一种有效的方法将字符串哈希为 int (尽管存在冲突)。 (2认同)