Скажите, пожалуйста, как проверить GUID в .net, и он уникален всегда?
Как проверить Guid в .net
Ответ 1
Гид уникален 99.99999999999999999999999999999999% времени.
Это зависит от того, что вы подразумеваете под подтверждением?
Код, чтобы определить, что строка Guid является фактически Guid, следующим образом:
private static Regex isGuid =
new Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);
internal static bool IsGuid(string candidate, out Guid output)
{
bool isValid = false;
output = Guid.Empty;
if(candidate != null)
{
if (isGuid.IsMatch(candidate))
{
output=new Guid(candidate);
isValid = true;
}
}
return isValid;
}
Ответ 2
2 ^ 128 - очень, очень большое число. Это в миллиард раз больше, чем количество пикосекунд в жизни Вселенной. Слишком длинный, чтобы оправдать, ответ обречен быть "42". Какой смысл использовать их: вам не обязательно. Если вы беспокоитесь о получении дубликатов, вы беспокоитесь по неправильной причине. Шансы, что ваша машина будет уничтожена метеорным ударом, значительно больше.
Утка!
Ответ 3
Здесь не-Regex ответ, который должен быть довольно быстрым:
public static bool IsHex(this char c)
{
return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'));
}
public static bool IsGuid(this string s)
{
// Length of a proper GUID, without any surrounding braces.
const int len_without_braces = 36;
// Delimiter for GUID data parts.
const char delim = '-';
// Delimiter positions.
const int d_0 = 8;
const int d_1 = 13;
const int d_2 = 18;
const int d_3 = 23;
// Before Delimiter positions.
const int bd_0 = 7;
const int bd_1 = 12;
const int bd_2 = 17;
const int bd_3 = 22;
if (s == null)
return false;
if (s.Length != len_without_braces)
return false;
if (s[d_0] != delim ||
s[d_1] != delim ||
s[d_2] != delim ||
s[d_3] != delim)
return false;
for (int i = 0;
i < s.Length;
i = i + (i == bd_0 ||
i == bd_1 ||
i == bd_2 ||
i == bd_3
? 2 : 1))
{
if (!IsHex(s[i])) return false;
}
return true;
}
Ответ 4
Вы не можете проверить уникальность GUID. Вы просто надеетесь, что он был создан с помощью инструмента, который генерирует уникальные 16 байтов. Что касается проверки, этот простой код может работать (при условии, что вы имеете дело со строковым представлением GUID:
bool ValidateGuid(string theGuid)
{
try { Guid aG = new Guid(theGuid); }
catch { return false; }
return true;
}
Ответ 5
Если вы ищете способ определить, является ли формат фактического типа .Net Guid
, взглянуть на эту статью. Быстрое регулярное выражение делает трюк.
Ответ 6
этот вопрос уже обсуждался в этом сообщении. Вы можете найти более интересные детали.
Ответ 7
В .net 4 вы можете использовать этот метод расширения
public static class GuidExtensions
{
public static bool IsGuid(this string value)
{
Guid output;
return Guid.TryParse(value, out output);
}
}