Как преобразовать UUID / GUID в OID / DICOM UID в JavaScript? - PullRequest
2 голосов
/ 19 сентября 2019

Как я могу преобразовать значение UUID / GUID, например 8348d2c5-0a65-4560-bb24-f4f6bcba601d (которое я сгенерировал с помощью uuid v4), в OID / DICOM UID, например 2.25.174506987738820548334170905323706671133?Я бы предпочел решение в JavaScript.См. wikipedia ).

Пример, который я преобразовал с помощью этого онлайн-генератора.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Я знаю, что вы ищете образец JavaScript;но следующий код AC #.Посмотрите, сможете ли вы перевести его на JavaScript.Имена переменных и типы данных говорят сами за себя, что может помочь при переводе.

Приведенный ниже код основан на этом ответе от @VictorDerks.В этом ответе есть даже более быстрый метод;

public string GenerateUidFromGuid()
{
    Guid guid = Guid.NewGuid();
    string strTemp = "";
    StringBuilder uid = new StringBuilder(64, 64);
    uid.Append("2.25.");

    //This code block is important------------------------------------------------
    string guidBytes = string.Format("0{0:N}", guid);
    BigInteger bigInteger = BigInteger.Parse(guidBytes, NumberStyles.HexNumber);
    strTemp = string.Format(CultureInfo.InvariantCulture, "{0}", bigInteger);
    uid.Append(strTemp);
    //This code block is important------------------------------------------------

    return uid.ToString();
}

Guid guid выглядит как f254934a-1cf5-47e7-913b-84431ba05b86.

string.Format("0{0:N}", guid) возвращает 0f254934a1cf547e7913b84431ba05b86.Форматирование удаляется и начинается с нуля.

BigInteger.Parse(guidBytes.... возвращает 322112315302124436275117686874389371782.BigInteger.Parse преобразует / анализирует строку в тип данных с большим целым числом.NumberStyles определяет способ форматирования.

Глядя на вопрос, я думаю, что вы уже знаете о подробностях, объясненных здесь и здесь .

1 голос
/ 19 сентября 2019

На основании другой ответ от @AmitJoshi;Теперь я могу ответить на мой вопрос:

Вот функция JavaScript:

function GenerateUidFromGuid(){
   var guid = uuid.v4();                         //Generate UUID using node-uuid *) package or some other similar package
   var guidBytes = `0${guid.replace(/-/g, "")}`; //add prefix 0 and remove `-`
   var bigInteger = bigInt(guidBytes,16);        //As big integer are not still in all browser supported I use BigInteger **) packaged to parse the integer with base 16 from uuid string
   return `2.25.${bigInteger.toString()}`;       //Output the previus parsed integer as string by adding `2.25.` as prefix
}

Ниже приведены ссылки:

jsfiddle

...