in csharp/src/Containers/UUID.cs [376:420]
public static bool IsValid(string str, int offset, UUIDParseFormat format)
{
if (str == null)
return false;
if (str.Length < offset + 32)
return false;
if (format == UUIDParseFormat.Any)
format = str[offset + 8] == '-' ? UUIDParseFormat.AnyCase : UUIDParseFormat.AnyCaseWithoutDashes;
switch (format)
{
case UUIDParseFormat.LowerCase:
case UUIDParseFormat.UpperCase:
case UUIDParseFormat.AnyCase:
{
if (!CanExtract(str, offset, 8, 0, format)) return false;
ulong m = Extract(str, offset, 8, 0, format);
if (str[offset + 8] != '-')
return false;
if (!CanExtract(str, offset + 9, 4, m, format)) return false;
m = Extract(str, offset + 9, 4, m, format);
if (str[offset + 13] != '-')
return false;
if (!CanExtract(str, offset + 14, 4, m, format)) return false;
m = Extract(str, offset + 14, 4, m, format);
if (str[offset + 18] != '-')
return false;
ulong l = 0;
if (!CanExtract(str, offset + 19, 4, 0L, format)) return false;
l = Extract(str, offset + 19, 4, 0L, format);
if (str[offset + 23] != '-')
return false;
if (!CanExtract(str, offset + 24, 12, l, format)) return false;
break;
}
case UUIDParseFormat.LowerCaseWithoutDashes:
case UUIDParseFormat.UpperCaseWithoutDashes:
case UUIDParseFormat.AnyCaseWithoutDashes:
if ((!CanExtract(str, offset, 16, 0L, format)) || (!CanExtract(str, offset + 16, 16, 0L, format))) return false;
break;
}
return true;
}