|
|
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
Добрый день. Если создавать строки из рандомных символов (как индентификатор, например) то есть вероятность, что будут совпадения. Есть ли возможность как-то сделать, что-бы каждый раз не просматривать уже существующие присвоенные идентификаторы? Нужно именно случ строка размером, скажем, 8 символов, автоинкремент с 0 - не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:15 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
Ну кроме как вариант заранее их создавать параллельно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:19 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
no56892, а GUID или MD5 от Guid - не подойдёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:21 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
Какие символы допустимы? Если 0-9,a-z,A-Z то это 62 значения на символ или 218*10^12 вариантов Возьми текущую дату-время в секундах от 01.01.15, займет 10^8 на 30 лет Оставшиеся 2180000 генери каким-нибудь рандомом. Маловато, тут надо голову поломать чтобы не задвоилось если пачками начнут генерить. Если в секунду много не надо, то как угодно. Затем полученное число переводи в 62-ричную систему счисления. Вобщем будет работать если не генерить пачками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 13:51 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
Dima TВозьми текущую дату-время в секундах от 01.01.15, займет 10^8 на 30 лет Ошибся немного, 9 знаков займет, т.е. 10^9 На остальную часть будет всего 218000. Генерация пачек резко усложняется. Если сделать 10 символов, то разрядность увеличится до 10^18 ( = 62^10). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2015, 14:07 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
no56892Добрый день. Если создавать строки из рандомных символов (как индентификатор, например) то есть вероятность, что будут совпадения. Есть ли возможность как-то сделать, что-бы каждый раз не просматривать уже существующие присвоенные идентификаторы? Нужно именно случ строка размером, скажем, 8 символов, автоинкремент с 0 - не подходит.То есть, если я правильно понял, генерируется список случайных строк, и хочется, чтобы в списке не было двух одинаковых? (Хотя "настоящая" случайность подразумевает повторения, если бросить игральную кость 7 раз, будет как минимум одно повторение ;) Тогда только проверять. А почему у вас нежелание проверять? При должной организации, это будет быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2015, 11:02 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
no56892Добрый день. Если создавать строки из рандомных символов (как индентификатор, например) то есть вероятность, что будут совпадения. Есть ли возможность как-то сделать, что-бы каждый раз не просматривать уже существующие присвоенные идентификаторы? Нужно именно случ строка размером, скажем, 8 символов, автоинкремент с 0 - не подходит. 8 символов для ASCII это грубо говоря 8 байт или 64 бита. Можно взять счётчик от 0 до 2^64-1 и каждое его значение подвергнуть определённым преобразованиям. Например вращать и переставлять биты. Потом это число преобразовать в вектор из 8 символов. Я утверждаю что данная последовательность строк будет уникальной пока не исчерпан диапазон 64х битного целого. Правда у этой последовательности возможно будут некоторые артефакты. Но обсуждать их лучше после создания макета. Возможно автора и это устроит вполне. В более сложном способе можно делать сложение по модулю 2 между битиками но последнее требует (возможно) некоторого гугления по теме всяких ГПСЧ и вопросов уникальности. Я щас не готов навскидку утверждать как там будет правильно и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2015, 13:11 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
mayton8 символов для ASCII это грубо говоря 8 байт или 64 бита. Можно взять счётчик от 0 до 2^64-1 и каждое его значение подвергнуть определённым преобразованиям. Например вращать и переставлять биты. Потом это число преобразовать в вектор из 8 символов.Ага, а можно взять и зашифровать любым криптоалгоритмом с 64х битным блоком. maytonВ более сложном способе можно делать сложение по модулю 2 между битиками но последнее требует (возможно) некоторого гугления по теме всяких ГПСЧ и вопросов уникальности. Я щас не готов навскидку утверждать как там будет правильно и т.п.Ну с ГПСЧ тоже ничего сложного, можно взять готовые значения параметров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2015, 14:03 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
Автор задаёт общий вопрос. Мы даже не знаем что у него есть в качестве инструмента. Может JavaScript? Криптография это вещь конечно мощная. Но давайте сначала исчерпаем простые продходы. Сиквенсы. И простые преобразования. И потом подихоньку подтянем тяжёлую артиллерию. ГПСЧ с уникальностью и блочные шифры. Хотя мне мой опыт подсказывает что обычно запросы более скромные. P.S. Просил я только масла на завтрак мне подать (С) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2015, 14:26 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
no56892Есть ли возможность как-то сделать, что-бы каждый раз не просматривать уже существующие присвоенные идентификаторы?Да, есть. Просто в строке должна быть случайная часть и неслучайная. В качестве последней хорошо подходит, например, что-то, создаваемое из штампа времени генерации, но без потери уникальности (без сокращения количества битов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2015, 16:12 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
no56892Нужно именно случ строка размером, скажем, 8 символов, автоинкремент с 0 - не подходит.Автоинкремент с 10000000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2015, 17:31 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
как вариант: - берём-таки поле с автоинкрементом - очередное значение переводим в другую систему счисления (двоичную, троичную и т.п.) и переставляем в нём "биты" (или как они будут называться для выбранной системы счисления) - собираем обратно "в число" На выходе будут "псевдослучайные" значения, (которые, правда, сравнительно несложно [чем выше основание системы - тем проще] будет предсказывать), но вдруг для задачи мега-секьюрность и не нужна? Зато гарантирована уникальность + полное покрытие диапазона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2015, 17:56 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
После простой перестановки битов они и будут всё равно отличаться 1 битом. Или "шуметь" будет больше всех 1 бит где-то в серединке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2015, 18:01 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
mayton"шуметь" будет больше всех 1 бит где-то в серединкеНу да, я ж про это и написал :-) Другая крайность - честная случайная функция + перебор "не выпадало ли такое?" Между этими вариантами - только модификации способа отображения последовательных чисел в непоследовательные разной степени замороченности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2015, 18:08 |
|
||
|
случайная строка
|
|||
|---|---|---|---|
|
#18+
Гость3mayton"шуметь" будет больше всех 1 бит где-то в серединкеНу да, я ж про это и написал :-) Другая крайность - честная случайная функция + перебор "не выпадало ли такое?" Между этими вариантами - только модификации способа отображения последовательных чисел в непоследовательные разной степени замороченности. "Честная функция" базирующаяся на произвольном ГСЧ должна хранить БД значений которые уже выпадали. Я не хочу давать оценок. Тут всё зависит от юзкейса но я-бы категорически ни себе никому не желал такую функцию. В печку ее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2015, 19:46 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38989854&tid=1340987]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 324ms |

| 0 / 0 |
