Russian Qt Forum
Ноябрь 26, 2024, 10:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Генерация уникальных ID  (Прочитано 10440 раз)
merke
Гость
« : Октябрь 15, 2009, 12:19 »

Всем привет! Встала проблема генерировать уникальные ID коды любой длины. Пример 1234568757
QUuid генерит ID с разделителями и не возможно задать разные длины((
Помогите пожалуйста, буду очень благодарен!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Октябрь 15, 2009, 12:54 »

Всем привет! Встала проблема генерировать уникальные ID коды любой длины. Пример 1234568757
QUuid генерит ID с разделителями и не возможно задать разные длины((
Помогите пожалуйста, буду очень благодарен!
Почему просто не руками, выглядит несложно: 

- структура данных QHash <int, QSet <QString>>
- ключ QHash - число знаков.
- сгенерировать новый QString нужной длины хотя бы используя qRand
- на старте не забыть зарядить sRand от текущего времени Улыбающийся
Записан
TukiNov
Гость
« Ответ #2 : Октябрь 15, 2009, 18:32 »

еще в третем кути делал, дааааааавно Улыбающийся
Код:
    QTime currentTime = QTime::currentTime();
    int currentHour = currentTime.hour();
    int currentMinute = currentTime.minute();
    int currentSecond = currentTime.second();
    int totalSecond = currentHour*60*60 + currentMinute*60 + currentSecond;
    srandom(int(((double)totalSecond/86400)*1000000));
    int rnd = random() % 999999;
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Октябрь 15, 2009, 20:27 »

еще в третем кути делал, дааааааавно Улыбающийся
Код:
    QTime currentTime = QTime::currentTime();
    int currentHour = currentTime.hour();
    int currentMinute = currentTime.minute();
    int currentSecond = currentTime.second();
    int totalSecond = currentHour*60*60 + currentMinute*60 + currentSecond;
    srandom(int(((double)totalSecond/86400)*1000000));

жесть. Обычно пишут
Код:
srand(time(NULL));
Записан
TukiNov
Гость
« Ответ #4 : Октябрь 15, 2009, 21:15 »

я знаю что жесть Улыбающийся писал лет пять назад такое Улыбающийся
Записан
SLiDER
Гость
« Ответ #5 : Октябрь 15, 2009, 21:37 »

Всем привет! Встала проблема генерировать уникальные ID коды любой длины. Пример 1234568757
QUuid генерит ID с разделителями и не возможно задать разные длины((
Помогите пожалуйста, буду очень благодарен!
Почему просто не руками, выглядит несложно: 

- структура данных QHash <int, QSet <QString>>
- ключ QHash - число знаков.
- сгенерировать новый QString нужной длины хотя бы используя qRand
- на старте не забыть зарядить sRand от текущего времени Улыбающийся

Я так понимаю человека интерисует не случайное число, а именно уникальное, qRand не гарантирует уникальности.
Записан
SLiDER
Гость
« Ответ #6 : Октябрь 15, 2009, 21:39 »

я знаю что жесть Улыбающийся писал лет пять назад такое Улыбающийся

А Вы проверяли насколько уникальные результаты дает Ваш алгоритм, просто интересно  Непонимающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Октябрь 16, 2009, 02:29 »

Я так понимаю человека интерисует не случайное число, а именно уникальное, qRand не гарантирует уникальности.
Я имел ввиду хранить все созданные ID и на каждой новом создании проверять и (если надо) пересоздать. Это выглядит тупенько но уникальность обеспечит и сделать несложно.
Записан
vaprele07
Гость
« Ответ #8 : Октябрь 16, 2009, 05:39 »

Код:
QByteArray randx(int size = 10)
{
QByteArray result;

static bool rndt; if (!rndt) { qsrand((uint)time(NULL)); rndt = true; }

char key = qrand();

for (int i = 0; i < size / sizeof(key); i++){
key += ((key << 2) | (key << (sizeof(key) * 8 - 2))) ^ qrand();
result.append((char*)&key, sizeof(key));
}

return result;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.