这可能以某种方式在C#中生成GUID,这大部分对应于我需要的东西。
例如:
我有一些版本变量: 02.10.0020
我需要生成一个与版本变量紧密对应的GUID。
类似 {02102012-98EF-41F6-96FF-2935C306E479}
这可能吗?
答案 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();
}