В DICOM есть два способа создания UID. Один основан на зарегистрированном корне UID, а другой - на UUID. Более поздний метод был добавлен к стандарту DICOM в CP-1156 в 2012 году. UID для таких вещей, как Study UID, Series UID, SOP Instance UID, могут быть созданы путем преобразования UUID в DICOM UID.
Большинство языков программирования имеют встроенную поддержку для создания UUID. В приведенном ниже примере кода кода создается действительный DICOM UID в C # на основе значения GUID.
public static string GuidToUidStringUsingStringAndParse(Guid value)
{
var guidBytes = string.Format("0{0:N}", value);
var bigInteger = BigInteger.Parse(guidBytes, NumberStyles.HexNumber);
return string.Format(CultureInfo.InvariantCulture, "2.25.{0}", bigInteger);
}
Следующий метод делает то же самое, но примерно в 5 раз быстрее:
public static string ConvertGuidToUuidInteger(ref Guid value)
{
// ISO/IEC 9834-8, paragraph 6.3 (referenced by DICOM PS 3.5, B.2) defines how
// to convert a UUID to a single integer value that can be converted back into a UUID.
// The Guid.ToByteArray Method returns the array in a strange order (see .NET docs),
// BigInteger expects the input array in little endian order.
// The last byte controls the sign, add an additional zero to ensure
// the array is parsed as a positive number.
var octets = value.ToByteArray();
var littleEndianOrder = new byte[]
{ octets[15], octets[14], octets[13], octets[12], octets[11], octets[10], octets[9], octets[8],
octets[6], octets[7], octets[4], octets[5], octets[0], octets[1], octets[2], octets[3], 0 };
return "2.25." + new BigInteger(littleEndianOrder).ToString(CultureInfo.InvariantCulture);
}
person
Victor Derks
schedule
04.01.2013