Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Здравствуйте, Disappear, Вы писали:
D>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Чем конкретно не устраивает GUID?
[ Posted via RSDN@Home 1.1.4 beta 5 (395) listening to silent ]
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, Alex Alexandrov, Вы писали:
AA>Здравствуйте, Disappear, Вы писали:
D>>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
AA>Чем конкретно не устраивает GUID?
А всем вроде устраивает. Просто интересно, может существуют подобные алгоритмы.
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, Disappear, Вы писали:
D>>Только хочется, что-нибудь отличное от GUID.
W>Сгенерируй GUID и сделай с ним что-нибудь. Переставь байты например.
Здравствуйте, Disappear, Вы писали:
D>Дык ведь повторяются.
Не понял. Если они высокого качества, то вероятность совпадения двух длинных случайных чисел равна нулю.
В жизни кaждoгo челoвекa бывaют приятные мoменты, кoгдa oн чувствует себя пoлным идиoтoм. Приятнoсть этих мoментoв в пoстижении истины.
Здравствуйте, sugarde, Вы писали:
S>Здравствуйте, sugarde, Вы писали:
S>Нет. Бред, не равна нулю, но стремится к нему.
Да, кажется что-то подобное писал Кнут ...
но нет ли все-таки какого либо испробованного алгоритма, который устремляет эту вероятность к 0 ?
Или хотябы какого порядка должны быть эти качественные случайные числа, чтобы устремить эту вероятность куда надо?
Здравствуйте, nen777w, Вы писали:
S>>>Генератор случайных чисел? D>> Дык ведь повторяются.
N>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>карты. Очень даже хороший генератор.
А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
Здравствуйте, Disappear, Вы писали:
D>Да, кажется что-то подобное писал Кнут ... D>но нет ли все-таки какого либо испробованного алгоритма, который устремляет эту вероятность к 0 ? D>Или хотябы какого порядка должны быть эти качественные случайные числа, чтобы устремить эту вероятность куда надо?
Насколько я помню, в GUID используется время, номер сетевой карты или случайное число.
Умноженная вероятность совпадения некого случайного числа по любому алгоритму и его одновременного создания с точностью до милисекунды.
( правда в генераторах случайных чисел тоже использется время) достаточно мала.
Опять же чем длиннее число тем вероятность меньше.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
и солнце б утром не вставало, когда бы не было меня
D> А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
Записать этот шум в WAVE файл и выбирать оттуда, файлов много можно
сделать, можно ещё сворачивать шум с шумом.
Извращение, и не совсем случайно, но шо делать в таком сл.
Здравствуйте, Disappear, Вы писали:
D>Здравствуйте, nen777w, Вы писали:
S>>>>Генератор случайных чисел? D>>> Дык ведь повторяются.
N>>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>>карты. Очень даже хороший генератор.
D>А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
А если на машине нет сетевухи, то GUID использует таймер. Можно что-то в этом роде. Просто звук — еще надежнее, чем таймер.
Если программист в рабочее время играет, значит —
либо у него мало работы и большая зарплата,
либо у него много работы и маленькая зарплата.
Здравствуйте, kost-BebiX, Вы писали:
KB>Здравствуйте, Disappear, Вы писали:
D>>Здравствуйте, nen777w, Вы писали:
S>>>>>Генератор случайных чисел? D>>>> Дык ведь повторяются.
N>>>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>>>карты. Очень даже хороший генератор.
D>>А если на компе нет звуковой карты. Например это глухонимой безвидяшный сервер.
KB>А если на машине нет сетевухи, то GUID использует таймер. Можно что-то в этом роде. Просто звук — еще надежнее, чем таймер.
Почему? У тебя есть статистика по распределению цифр в зависимости от шумов?
Здравствуйте, nen777w, Вы писали:
N>Случайные числа получаемые из шумов/сигнала в Aux-е твоей звуковой N>карты. Очень даже хороший генератор.
Охотно верю что это хороший генератор. Только не уверен что он может давать абсолютную уникальность.
Здравствуйте, Andrew_B, Вы писали:
A_B>делали как-то репликацию двух баз mssql,там uniqueidentifier-ы совпали
Интересно. Я не большой знаток в области генерации GUID-ов, но был уверен, что это невозможно. Основными элементами уникальности, насколько я знаю, являются MAC-адрес сетевой карты и показания системных часов. Неужели реплицируемые без ethernet-а были?
[ Posted via RSDN@Home 1.1.4 beta 5 (395) listening to silent ]
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, Disappear, Вы писали:
D>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Если скорость не важна, то самое простое – это взять что либо физически случайное из компьютера.
Например показания датчиков (температур, скорости вентиляторов, напряжений), шум звуковой платы, асинхронность генераторов в СМОS и MB.
Я считаю, что очень хороший результат даёт RDTSC in CPU PENTIUM.
Точнее, хорим некоторое время, большее чем время между прерываниями, последовательные результаты RDTSC, затем хорим все биты результата и получаем случайный бит.
За счёт асинхронности современных компьютеров получается очень хороший результат.
Тесты это подтверждают.
Далее, берём таких битов столько, сколько надо, и получаем уверенно уникальный GUID. На 100 лет хватит 64 бит.
Здравствуйте, exp_1, Вы писали:
_>Здравствуйте, Disappear, Вы писали:
D>>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
_>Если скорость не важна, то самое простое – это взять что либо физически случайное из компьютера. _>Например показания датчиков (температур, скорости вентиляторов, напряжений), шум звуковой платы, асинхронность генераторов в СМОS и MB.
_>Я считаю, что очень хороший результат даёт RDTSC in CPU PENTIUM. _>Точнее, хорим некоторое время, большее чем время между прерываниями, последовательные результаты RDTSC, затем хорим все биты результата и получаем случайный бит.
_>За счёт асинхронности современных компьютеров получается очень хороший результат. _>Тесты это подтверждают.
_>Далее, берём таких битов столько, сколько надо, и получаем уверенно уникальный GUID. На 100 лет хватит 64 бит.
_>Пример с исходником (Генератор паролей) здесь:
_>http://www.isan.troitsk.ru/~panfilov/Rus/Programs.htm
Хм. Интересный способ. А на AMD процессорах работат?
Жаль что линка дохлая, очень интересно было бы взглянуть.
D>Хм. Интересный способ. А на AMD процессорах работат? D>Жаль что линка дохлая, очень интересно было бы взглянуть.
На АМД работает от К6 и выше. На К5 и ниже, типа AMD486 уже нет.
Странно, что линка не работает. Тогда попробуйте эту.
Вспомнились ещё способы получения шумов на PC:
Асинхронность вращения FD, CD, HD.
Использовался даже такой экзотический, как отключение автоматической регенерации RAM и шумоподобная порча данных в ней.
Если нужна скорость, то начальная часть GUID берётся уникальной, а остальная инкрементированием.
Здравствуйте, pavel_turbin, Вы писали:
_>Здравствуйте, Andrew_B, Вы писали:
A_B>>делали как-то репликацию двух баз mssql,там uniqueidentifier-ы совпали
_>попробуйте использовать sequence number, как в Oracle. В этом случае ключи всегда уникальны.
Sequence-ы здесь мало помогут. Если не ошибаюсь, в MSSQL guid-ы используются для генерации идентификаторов, уникальных между серверами. Распределенные сиквенсы в Oracle мне неизвестны. Там обычно эта задача решается соединением идентификатора, уникального локально, с неким раздаваемым централизованно идентификатором сервера БД.
[ Posted via RSDN@Home 1.1.4 beta 5 (395) listening to silent ]
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, Disappear, Вы писали:
D>Не подскажете ли алгоритм, который бы генерировал уникальные (в ближайшие лет 100) числа? Например, как это делает CoCreateGUID. Только хочется, что-нибудь отличное от GUID.
Если не сильно важна скорость, то можно сделать очень простую вещь.
Берём время, создаём из неё строку и хешируем её (SHA1, SHA256, SHA512 — выбирай нужную длину). Полученный результат используем.
Если будут сгенерированы два одинаковых числа, то взбудоражишь всё криптографическое сообщество, как было в прошлом году с SHA-0.
Здравствуйте, Andir, Вы писали:
A>Если не сильно важна скорость, то можно сделать очень простую вещь. A>Берём время, создаём из неё строку и хешируем её (SHA1, SHA256, SHA512 — выбирай нужную длину). Полученный результат используем.
Хотя конечно глобальной уникальности так не получить