![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Генерация уникальной последовательности латинских букв и цифр [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, она тебе поможет решить пролему