Но вот как бы я сделал это сейчас

Пару лет назад я создал эту суть с методом преобразования UUID в целые числа в JavaScript, и это было так давно, что я забыл, зачем он мне вообще был нужен. Мое лучшее предположение — использовать UUID как легко сортируемые/доступные для поиска первичные ключи в базе данных (например, с MySql’s DECIMAL(39,0)).



(Не знаю, почему я не могу встроить файл предыдущей редакции в статью на Medium, но вот…)

Тогда я обнародовал суть, и недавно я заметил, что несколько человек спрашивали меня, как преобразовать целые числа обратно в UUIDS, что заставило меня еще раз взглянуть на это и попытаться понять, что нужно сделать.

Первое, что я сделал, это написал метод для обратного целочисленного преобразования:

const buf = Buffer.alloc(16);
buf.writeUInt32BE(num, 0);

Но я столкнулся с проблемой, которая продемонстрировала, что в исходном коде была (теперь явно очевидная) ошибка:

a6cae06b-77ea-4d16-a35c-fc6c24bf7074 =› ‹Buffer a6 ca e0 6b 77 ea 4d 16 a3 5c fc 6c 24 bf 70 74›
‹Буфер a6 ca e0 6b 77 ea 4d 16 a3 5c fc 6c 24 bf 70 74› =› 2798313579
2798313579 = › ‹Буфер a6 ca e0 6b 00 00 00 00 00 00 00 00 00 00 00 00›

Он преобразовывал только первые четыре байта! Что совершенно логично, учитывая целочисленные ограничения JavaScript, но в мои намерения не входило просто сбрасывать три четверти байтов... Поэтому я искал лучший способ и, к счастью, обнаружил, что этот вариант использования аккуратно обрабатывается Пакет bignumber.js:

Теперь мы видим такие результаты, как ce01a673-aa43–47c0–9774-c6c18fc644e8 =› 273829535472477888503753537481978823912 =› ce01a673-aa43–47c0–9774-c 6c18fc644e8

Сделанный!