Преобразование UUIDV4 в десятичное на основе 16 - PullRequest
0 голосов
/ 07 февраля 2020

Я не хочу делиться своим первичным ключом в API, поэтому я использовал UUID4 для генерации уникального идентификатора строки.
Но мне нужно найти эту строку, используя сгенерированный uuid, который может вызвать проблемы с производительностью, так как длина строки слишком велика.
Я попытался преобразовать этот uuid в десятичную на основе 16.

const uuid = UUIDV4() //57d419d7-8ab9-4edf-9945-f9a1b3602c93
const uuidToInt = parseInt(uuid, 16)
console.log(uuidToInt) //1473518039

По умолчанию это только преобразование первого блока в десятичный
Безопасно ли использовать его таким образом?
Сколько существует возможностей потерять уникальность строки?

1 Ответ

1 голос
/ 07 февраля 2020

Я попытался преобразовать этот uuid в десятичный на основе 16.

десятичный или шестнадцатеричный. Число не может быть и тем и другим. Кроме того, uuid уже является шестнадцатеричным форматом.

Вот как вы можете преобразовать его в десятичное значение.

var uuid = "57d419d7-8ab9-4edf-9945-f9a1b3602c93";
var hex = "0x" + uuid.replace(/-/g, "");
var value = BigInt(hex);
var decimal = value.toString(); // don't convert this to a number.

console.log({
  uuid,
  hex,
  decimal
});

Осторожно, не конвертируйте значение BigInt в обычное число, JS Числа не могут работать с такими большими значениями. У них есть только 53 бита точности. Вы потеряете 75 наименее значимых бит вашего uuid.

...