在数据库之外生成非guid唯一键

时间:2011-09-22 10:23:31

标签: c#

我有一种情况,我需要在'实体'之间创建某种独特性,但它不是GUID,并且它不会保存在数据库中(但它是保存的。不是由数据库保存)。

密钥的基本用法仅仅是冗余检查。它不必像真正的“主键”一样可扩展,但用我能想到的最简单的术语来说,这就是它的工作原理。

[receiver]List<possibilities>

possibilities独立存在,但许多将具有相同的值(无法预测。这是设计)

possibilities接收器列表通常必须清空然后重新填充(这是业务要求)。

该密钥主要用于添加非常轻量级的冗余检查。换句话说,有时会重复相同的可能性,有时它只应出现在接收者列表中一次。

我基本上想要使用非常简单的东西。字符串就足够了。我只是想找出一个适度的算法来实现这一目标。我想过使用GetHashCode()方法,但我不确定它是多么可靠。我可以得到一些想法吗?

2 个答案:

答案 0 :(得分:0)

尝试使用此方法生成Guid。

生成UUID / GUID的VBScript函数

如果您使用的是Windows,则可以使用下面的简单VBScript生成UUID。只需将代码保存到名为createguid.vbs的文件中,然后在命令提示符下运行cscript createguid.vbs。

Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
WScript.Echo(left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing

通过Windows命令行创建UUID / GUID

If you have the Microsoft SDK installed on your system, you can use the utility uuidgen.exe, which is located in the "C:\Program Files\Microsoft SDK\Bin" directory

或尝试相同以获取更多信息。

Link

我想说的是Windows命令行,因为它更可靠。

答案 1 :(得分:0)

如果你可以乍一看使用GetHashCode(),你也可以使用MD5哈希,获得更少的冲突概率。生成的MD5可以通过编码基础64存储为24个字符串字符串,让我们看看这个例子:

    public static class MD5Gen
    {
        static MD5 hash = MD5.Create();
        public static string Encode(string toEncode)
        { 
            return Convert.ToBase64String(
            hash.ComputeHash(Encoding.UTF8.GetBytes(toEncode)));
        }
    }

这样你就可以用字符串格式在md5哈希中编码源字符串。你只需要用字符串来写“可能性”类。