Генерация легко запоминаемых случайных идентификаторов - PullRequest
5 голосов
/ 16 апреля 2010

Как и все разработчики, мы постоянно имеем дело с какими-то идентификаторами как часть нашей повседневной работы. В большинстве случаев речь идет об ошибках или билетах поддержки. Наше программное обеспечение, обнаружив ошибку, создает пакет с именем, отформатированным из отметки времени и номера версии, что является дешевым способом создания достаточно уникальных идентификаторов, чтобы избежать путаницы в пакетах. Пример: « Отчет об ошибке 20101214 174856 6.4b2 ».

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

Требуется около 5 минут, чтобы запустить алгоритм наподобие следующего в python, который дает наполовину полезные результаты:

import random

vowels = 'aeiuy' # 0 is confusing
consonants = 'bcdfghjklmnpqrstvwxz'
numbers = '0123456789'

random.seed()

for i in range(30):
    chars = list()
    chars.append(random.choice(consonants))
    chars.append(random.choice(vowels))
    chars.append(random.choice(consonants + numbers))
    chars.append(random.choice(vowels))
    chars.append(random.choice(vowels))
    chars.append(random.choice(consonants))
    print ''.join(chars)

Результаты выглядят так:

re1ean
meseux
le1ayl
kuteef
neluaq
tyliyd
ki5ias

Это уже довольно хорошо, но я чувствую, что все еще легко забыть, как именно они написаны, так что если вы подойдете к столу коллеги и захотите посмотреть один из них, у вас все еще есть трудности.

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

Вам известны какие-либо опубликованные алгоритмы, решающие эту проблему?

Спасибо!

Карл

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

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

Кроме того, в вашем примере вы мудро исключили «о», но забыли о «л», который вы можете легко спутать с «1». Я предлагаю вам также убрать «л». ; -)

2 голосов
/ 16 апреля 2010

Я не уверен, что это отвечает на ваш вопрос, но, возможно, подумайте, сколько уникальных номеров сообщений об ошибках вам нужно.

Просто используя четырехбуквенную буквенно-цифровую клавишу типа BX-3D, вы можете получить 36 ^ 4 = 1,7 миллиона сообщений об ошибках.

Изменить: Я только что виделваш образец.Возможно, результаты могли бы быть значительно улучшены, если бы вы использовали слоги вместо согласных и гласных.

...