Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Генерация уникальной последовательности латинских букв и цифр [D5, NT4]


madtomas ©   (2002-09-20 12:04:00) 

Возникла необходимость генерить УНИКАЛБНУЮ последовательность латинских букв и цифр длинной 16 символов ...
Как этоможно сделать ?
Или может есть какие-то готовые компаненты


Андрей Прокофьев   (2002-09-20 12:55:00) [1]

Если речь идет о серийных номерах, то некоторые инсталляторы их генерят


Anatoly Podgoretsky   (2002-09-20 12:50:00) [2]

Не стоит делать через Random(255) это не соответствует задаче, лучше через массив допустим символов в пароле, тогда AllowedPwdChars[Random(SizeOf(AllowedPwdChars))+1] даст нам один символ, а уникальность достигается сравнением с ранее введенными, коллизии будут чрезвычайно редко если вообще будут


Старый Паскалист   (2002-09-20 12:46:00) [3]

2madtomas (20.09.02 12:40)
>но ведь кто-то уже наверняка это сделал

Это такая элементарная вещь, что каждый делает её сам.
(если ему чем-то не подходит стандартный GUID).


qube   (2002-09-20 12:42:00) [4]


> AL2002 ©

маленькая поправка:
рандомизетимер;
16 раз счр(рандом(255));


AL2002   (2002-09-20 12:40:00) [5]

Задача только генерить. Значит, шестнадцать раз СЧР(рандом()).


madtomas   (2002-09-20 12:40:00) [6]

2Старый Паскалист уникальности в моей программе мне вполне хватит ... И в принципе написать свое извращение для генерации этой самой последовательности - не проблемма, но ведь кто-то уже наверняка это сделал ... Вот и хочется позаимствовать это дело ... А проверять уникальность я как раз и буду на основе уже существующих последовательностей ....


REA   (2002-09-20 12:37:00) [7]

Уникальное в пределах чего?
CreateGUID создает последовательность с высокой долей вероятности уникальную.
GetTempFileName тоже что то выдает.


Старый Паскалист   (2002-09-20 12:29:00) [8]

2madtomas
Во первых, чем тебе буква - не число?
(Есть такая вещь, как отображение множеств)

А во вторых, что ты подразумеваешь под уникальностью?
В каких пределах? - точная уникальность - это когда ты
хранишь список уже сгенерированных последовательностей и
проверяешь любую сгенерированную на совпадение.
Но это унникальность только в твоей программе.

Принцип глобальной уникальности - в обеспечении оченьнизкой вероятности совпадения двух последовательностей. Для этого и пользуются генераторами случайных чисел + достаточно длинными последовательностями.


AFrolov   (2002-09-20 12:28:00) [9]

Нужна не только функция Random но и еще желание задуматьмся над задачей.
Есть готовое решение которое дает последовательность из 16 байт - называется эта вещь GUID и может быть получена с помощью функции CoCreateGuid. Уникальность ее гарантирована. О том как ее использовать можно прочитать в Help.


Anatoly Podgoretsky   (2002-09-20 12:20:00) [10]

Во первых это будет индекс куда то, а во вторых как ты уникальность определяешь, что уникально или нет


qube   (2002-09-20 12:20:00) [11]

ну, буквы и числа это одно и то же (см. Chr(), Ord()).

для уникальности обычно привязываются к времени/дате (в данном случае поможет RandomizeTimer)

чем больше символов, тем меньше вероятность повторения.

А вообще, вопрос сложный. Microsoft для генерации GUID"ов серийный номер сетевой карты использует (где-то слышал).


madtomas   (2002-09-20 12:17:00) [12]

непоможет .... во первых это будет число (а надо с буквами), и оно будет случайное, а не уникальное ... ;-))


Anatoly Podgoretsky   (2002-09-20 12:08:00) [13]

Есть такая функция Random, она тебе поможет решить пролему


Наверх

Титульная страница Поиск, карта сайта Написать письмо