Случайные идентификаторы в JavaScript - PullRequest
2 голосов
/ 03 августа 2020

Я генерирую случайные идентификаторы в javascript, которые служат в качестве уникальных идентификаторов сообщений для пакета аналитики.

При проверке данных (более 10 миллионов записей) есть некоторые незначительные конфликты для некоторых идентификаторов для по разным причинам (попытки сети, подделка данных роботов и т. д. c), но есть одна, в частности, с интригующим количеством конфликтов: akizow-dsrmr3-wicjw1-3jseuy .

The Частота конфликтов для указанного выше идентификатора составляет около 0,0037%, в то время как частота конфликтов для других идентификаторов составляет менее 0,00035% (в 10 раз меньше) из выборки 111MM записей за тот же день. В то время как другие идентификаторы меняются изо дня в день, этот остается неизменным, поэтому в течение более длительного периода разница, вероятно, будет больше, чем 10x. * введите описание изображения здесь

Это алгоритм, используемый для генерации случайных идентификаторов:

function generateUUID() {
    return [
        generateUUID4(), generateUUID4(), generateUUID4(), generateUUID4()
    ].join("-");
}

function generateUUID4() {
    return Math.abs(Math.random() * 0xFFFFFFFF | 0).toString(36);
}

Я изменил алгоритм, и это похоже на akizow-dsrmr3-wicjw1-3jseuy Math.random () браузера возвращает следующие четыре числа в следующем порядке: 0,1488114111471948, 0,19426893796638328, 0,45768366415465334, 0,0499740378116197, но я не вижу в них ничего особенного. Кроме того, из других данных, которые я собрал, кажется, что это особенно заметно после перенаправления / предварительной загрузки (например, результаты Google, клики по рекламе и т. Д. c).

Итак, у меня есть 3 гипотезы:

  1. Имеется статистическая проблема с алгоритмом, который вызывает эту специфику c коллизия
  2. Перенаправления / предварительная загрузка каким-то образом мешают семенам псевдослучайного генератора
  3. Робот достаточно умен, чтобы он подделывает все остальные данные, но по какой-то причине сохраняет тот же случайный идентификатор. Данные поступают от разных пользовательских агентов, IP-адресов, стран и т. Д. c.

Есть идеи, что могло вызвать эту коллизию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...