2012-02-09 3 views
2

Мне нужно сгенерировать уникальную строку, не последовательную буквенно-цифровую строку длиной 6 (не менее, не более). С несекретным я имею в виду, что он должен выглядеть визуально случайным с первого взгляда и не вытекать из последовательности (неважно, сможете ли вы найти последовательность после некоторого количества дней обучения, она должна просто казаться случайной с первого взгляда) , И помните, что он должен быть уникальным. Невозможно также просмотреть все числа, которые уже были использованы.Создайте уникальную строку, не последовательную буквенно-цифру длиной 6

Я думал о том, чтобы создать базу данных с уникальным номером, а затем применить некоторую функцию для преобразования этого числа в уникальную несекретную буквенно-цифровую строку точно длины 6. Как и алгоритм хеширования, но без возможных столкновений ,

Я нашел это: http://blog.maxant.co.uk/pebble/2010/02/02/1265138340000.html Но последовательность не визуально случайна.

ответ

0

Возможно ли зарегистрировать сгенерированную последовательность строк в некоторой базе данных/файле/где-нибудь? Тогда один способ сделать может быть для каждой позиции (от 1 до 6), случайным образом выбрать символ и сформировать вашу 6-значную строку. И посмотрите, является ли это одной из зарегистрированных или нет. Если он уже зарегистрирован, то сгенерирована другая последовательность. Если не зарегистрирован, зарегистрируйте & сгенерированный для вашей цели.

+0

Это потребует много попыток, если система работает некоторое время. – user968698

0

С помощью буквенных цифр вы указываете [A-Z0-9], [a-zA-Z0-9] или хотите [a-zA-Z0-9\+\\] быть приемлемым? В последнем случае вы можете обмануть, XOR свой уникальный идентификатор с достаточно большой стоимостью, а затем выбросить всю партию через алгоритм Base64, экономя работу.

Для двух других, возьмите лист из простой книги генератора псевдослучайных чисел; Выполните что-то вроде x = ((id + salt)*multiplier) mod pow(alphabet_size,6) и затем «расшифруйте» целое число x буквенно-цифровыми символами. Разумеется, выбор хорошего salt и multiplier важен; Последний в идеале был бы большим простым или, по крайней мере, совпадающим с alphabet_size. salt может быть даже нулевым, но его можно использовать для более эстетичного значения для выхода, если хотите.

Если первоначальный идентификатор никогда не превышает pow(alphabet_size,6), хэш будет однозначно обратимым. Вам нужно будет преобразовать ваш хэш обратно в целое число, а затем использовать алгоритм модульного деления для повторного получения (id + salt) и, следовательно, оригинала id.

Смежные вопросы