Генерация желаемого GUID в C # - PullRequest
3 голосов
/ 21 марта 2012

Возможно ли как-то сгенерировать GUID в C #, который в основном соответствует тому, что мне нужно.

Например:

У меня есть переменная версии: 02.10.0020

И мне нужно сгенерировать GUID, который близко соответствует переменной версии.

что-то вроде {02102012-98EF-41F6-96FF-2935C306E479}

Возможно ли это?

Ответы [ 6 ]

8 голосов
/ 21 марта 2012

Хотя вы можете создать новый GUID и заменить первый раздел вашей версией, я бы не рекомендовал его.Это не то, для чего был разработан GUID.Вам лучше иметь и GUID, и версию.

7 голосов
/ 21 марта 2012

Это невозможно напрямую.

Вы можете сгенерировать GUID, затем преобразовать в строку и заменить первый раздел требуемым форматом.

Это означает, что вы уменьшаете энтропию GUID.

1 голос
/ 21 марта 2012

Если вы действительно хотите, вы можете создать новый Guid с Guid.NewGuid(), а затем использовать его значение вместе с вашими данными для создания другого нового Guid.

Однако это извращает Guid, и вы должны подумать, действительно ли это необходимо.

0 голосов
/ 15 декабря 2017

Я сделал этот код (используйте LinqPad), который генерирует guid из строки произвольной длины с использованием хэш-системы md5.

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();
}
0 голосов
/ 21 марта 2012

Вы можете создать строковое значение и преобразовать его в guid.С другой стороны, вы никогда не можете быть уверены, что этот гид уникален.

0 голосов
/ 21 марта 2012

Другой вариант, который я использовал для таких вещей, - просто добавить Guid к вашей версии:

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