Я генерирую случайные идентификаторы в 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 гипотезы:
- Имеется статистическая проблема с алгоритмом, который вызывает эту специфику c коллизия
- Перенаправления / предварительная загрузка каким-то образом мешают семенам псевдослучайного генератора
- Робот достаточно умен, чтобы он подделывает все остальные данные, но по какой-то причине сохраняет тот же случайный идентификатор. Данные поступают от разных пользовательских агентов, IP-адресов, стран и т. Д. c.
Есть идеи, что могло вызвать эту коллизию?