2010-04-16 16 views
5

Como hacen todos los desarrolladores, constantemente tratamos con algún tipo de identificadores como parte de nuestro trabajo diario. La mayoría de las veces, se trata de errores o tickets de soporte. Nuestro software, al detectar un error, crea un paquete que tiene un nombre formateado a partir de una marca de tiempo y un número de versión, que es una forma económica de crear identificadores razonablemente únicos para evitar mezclar paquetes. Ejemplo: "Informe de errores 20101214 174856 6.4b2".Generar identificadores aleatorios fáciles de recordar

Mi cerebro no es tan bueno en recordar números. Lo que me gustaría tener es una forma simple de generando identificadores alfanuméricos que son fáciles de recordar.

Se tarda unos 5 minutos para azotar encima de un algoritmo como el siguiente en Python, que produce resultados a mitad de camino utilizables:

import random 

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

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) 

Los resultados de este aspecto:

re1ean 
meseux 
le1ayl 
kuteef 
neluaq 
tyliyd 
ki5ias 

Esto ya es bastante bueno, pero siento que todavía es fácil olvidar cómo se escriben exactamente, de modo que si te acercas al escritorio de un compañero y quieres ver uno de ellos, aún existe la posibilidad de que surja alguna dificultad.

Sé de algoritmos que realizan análisis de trigrama en texto (digamos que les das de comer todo un libro en alemán) y que pueden generar cadenas que se ven y se sienten como palabras alemanas y por lo tanto más fáciles de manejar en general. Sin embargo, esto requiere una gran cantidad de datos y lo hace un poco menos adecuado para incrustar en una aplicación solo para este propósito.

¿Conoce alguna algoritmos publicados que solucionen este problema?

Gracias!

Carl

+5

Deberías leer esto antes de empezar a pensar en generar palabras aleatorias: http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx – Prutswonder

+0

¡Ha, buena idea! ¡Lo tendré en cuenta! –

Respuesta

2

No estoy seguro de que esto responda a su pregunta, pero tal vez pienso en cuántos número de informe de error único que necesita.

Simplemente usando una de cuatro letras mayúsculas clave alfanumérica como "BX-3D", que puede tener 36^4 = 1,7 millones de informes de errores.

Editar: Acabo de ver su muestra. Tal vez los resultados podrían mejorarse considerablemente si usaras sílabas en lugar de consonantes y vocales.

2

Como usted ha dicho, su muestra es bastante bueno. Pero si quiere identificadores aleatorios que puedan ser fácilmente recordados, entonces no debe mezclar caracteres alfanuméricos y numéricos. En su lugar, puede optar por postfix una cadena alfanumérica con un par de dígitos.

Además, en la muestra usted sabiamente excluidos 'O', pero se olvidó de la 'l', que se puede confundir fácilmente con '1'. Sugiero que elimines la 'l' también. ;-)

Cuestiones relacionadas