|
Мне надо найти алгоритм генерации никогда не повторяющейся последовательности. В последовательность могут входить цифры и буквы (нельзя включать нечитаемые символы). Нужно примерно то же, что и в генерации GUID в для COM-объектов. Если кто знает популярные алгоритмы/библиотеки, прошу поделиться советом. |
|
Как верно подметил @VioLet, можно использовать UUID. Не доконца разобрался, будит ли он уникальным всегда или нет, но нашел реализацию v4 на Go. Код:
} |
|
Весь вопрос упирается в степень достоверности уникальности кода. Если это не сильно принципиально (ну скажем устраивает вероятность появления повторяющегося кода порядка 10 в минус 6-7) - то вполне нормально тупо брать текущее время + случайный символ и хэш ключ от этого значения. В псевдокоде я бы написал так:
Если требуется железобетонная уверенность то нужен генератор спецом. В Java для этого существует удобный пакет java.util.concurrent.atomic |
А сам UUID почему не подходит?
Совет в лоб: md5 от текущей даты + MAC сетевой карты (или SN другого железа).
другие постеснялись в этом вам признатся но я не люблю врать. нет такого алгоритма. чтоб всегда была случайная последовательность. для последовательности любой длинны количество вариантов ограниченное. логично предположить что для того чтоб ваша последовательность никогда не повторялась надо ее длину каждый раз увиличивать хотя бы на 1 бит.
как вам уже предлагали md5 от даты + 1 бит/байт как вам удобнее