2012-03-21 2 views
2

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

Для экс:

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

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

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

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

+2

гм ... то уникальность не может быть гарантирована, поэтому он не будет квалифицироваться как GUID ... – code4life

ответ

7

Это невозможно.

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

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

+0

Спасибо, я знаю, что я могу настроить его в соответствии с моими потребностями, используя string.replace. Мне было любопытно, есть ли возможность, где я мог бы это сделать :) –

+0

@ this-Me - «Мне было любопытно, существует ли возможность, где я могу это сделать». Что это значит??? – Oded

+0

Я имел в виду прямолинейный путь ... Guid.NewGuid («# 2012 #»); где # 2012 # указывает шаблон GUID, я хочу –

8

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

1

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

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

0

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

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

Нет, я не ищу, чтобы сделать его более уникальным, отметив дополнительную информацию о версии. Я просто хотел узнать, существует ли возможность, когда я смогу получить GUID, соответствующий шаблону, соответствующий моим требованиям –

0

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

0

Я сделал этот код (используя 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(); 
} 
Смежные вопросы