Поскольку все разработчики делают, мы постоянно имеем дело с некоторыми идентификаторами как часть нашей ежедневной работы. Большую часть времени это об ошибках или запросах в службу поддержки. Наше программное обеспечение, после обнаружения ошибки, создает пакет, которому отформатировали имя от метки времени и номера версии, который является дешевым способом создать довольно уникальные идентификаторы, чтобы не перепутывать пакеты. Пример: "Отчет об ошибках 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
Это уже довольно хорошо, но я чувствую, что все еще легко забыть, как они записаны точно, так, чтобы, если Вы техническая победа к столу коллег и хотите искать одного из тех, там было все еще потенциальным для трудности.
Я знаю об алгоритмах, которые работают, триграммный анализ текста (скажите питание их целая книга на немецком языке), и это может генерировать строки, которые стиль как немецкие слова и таким образом легче обработать обычно. Это требует большого количества данных, тем не менее, и делает это немного менее подходящим для встраивания в приложение просто с этой целью.
Вы знаете о каких-либо опубликованных алгоритмах, которые решают эту проблему?
Спасибо!
Carl
Я не уверен, что это отвечает на ваш вопрос, но, возможно, подумайте, сколько уникальных номеров отчетов об ошибках вам нужно.
Просто используя четырехбуквенную буквенно-цифровую клавишу, например «BX-3D», можно получить 36 ^ 4 = 1,7 миллиона отчетов об ошибках.
Редактировать: Я только что видел ваш образец. Возможно, результаты можно было бы значительно улучшить, если бы вы использовали слоги вместо согласных и гласных.
Как вы сказали, ваш образец неплох. Но если вам нужны случайные идентификаторы, которые можно легко запомнить, не следует смешивать буквенно-цифровые и числовые символы. Вместо этого вы можете добавить к буквенно-цифровой строке пару цифр.
Кроме того, в вашем примере Вы мудро исключили «o», но забыли о «l», которое можно легко спутать с «1». Я предлагаю вам также удалить букву «l». ; -)