在C#中生成所需的GUID

时间:2012-03-21 13:32:28

标签: c# guid

这可能以某种方式在C#中生成GUID,这大部分对应于我需要的东西。

例如:

我有一些版本变量: 02.10.0020

我需要生成一个与版本变量紧密对应的GUID。

类似 {02102012-98EF-41F6-96FF-2935C306E479}

这可能吗?

6 个答案:

答案 0 :(得分:8)

虽然你可以创建一个新的GUID并用你的版本替换第一部分,但我不推荐它。这不是GUID的设计目标。你最好同时使用GUID和版本。

答案 1 :(得分:7)

这不是直接可能的。

您可以生成GUID,然后转换为字符串,并将第一部分替换为所需格式。

这意味着您正在减少GUID的熵。

答案 2 :(得分:1)

如果您真的想要,可以使用Guid.NewGuid()创建新的Guid,然后将其值与您的数据结合使用,以创建另一个新的Guid。

然而,这会使Guid变态,你应该考虑这是否真的有必要。

答案 3 :(得分:0)

我用于此类事情的另一个选项是简单地将Guid附加到您的版本:

string myGuid = string.format("02.10.0020-{0}", System.Guid.NewGuid());

答案 4 :(得分:0)

您可以创建一个字符串值并将其转换为guid。另一方面,你永远不能确定这个guid是独一无二的。

答案 5 :(得分:0)

我做了这个代码(使用LinqPad),它使用md5哈希系统从自定义长度字符串生成一个guid。

void Main()
{
    Guid.NewGuid().Dump();
    ParseCustom("ID123456").Dump();
    ParseCustom("ID12345678").Dump();
}

private static Guid ParseCustom(string input)
{
    var md5 = System.Security.Cryptography.MD5.Create();
    byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
    var guidString = ToHexString(hashBytes);
    return new Guid(guidString);
}

// Define other methods and classes here
private static char ToHexDigit(int i)
{
    if (i < 10)
        return (char)(i + '0');
    return (char)(i - 10 + 'A');
}

public static string ToHexString(byte[] bytes)
{
    var chars = new char[bytes.Length * 2];

    for (int i = 0; i < bytes.Length; i++)
    {
        chars[2 * i] = ToHexDigit(bytes[i] / 16);
        chars[2 * i + 1] = ToHexDigit(bytes[i] % 16);
    }

    var guid = new string(chars)
        .Insert(8, "-")
        .Insert(13, "-")
        .Insert(18, "-")
        .Insert(23, "-");
    return guid.ToLower();
}