2010-04-16 9 views
5

Come tutti gli sviluppatori, ci occupiamo costantemente di alcuni tipi di identificatori come parte del nostro lavoro quotidiano. La maggior parte delle volte si tratta di bug o ticket di supporto. Il nostro software, rilevando un bug, crea un pacchetto con un nome formattato da un timestamp e un numero di versione, che è un modo economico di creare identificatori ragionevolmente unici per evitare di mescolare i pacchetti. Esempio: "Bug Report 20101214 174856 6.4b2".Generazione di identificatori casuali facili da ricordare

Il mio cervello non è così bravo a ricordare i numeri. Quello che mi piacerebbe avere è un modo semplice di che genera identificatori alfanumerici facili da ricordare.

Ci vogliono circa 5 minuti per improvvisare un algoritmo simile al seguente in Python, che produce risultati a metà strada utilizzabili:

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) 

I risultati simile a questa:

re1ean 
meseux 
le1ayl 
kuteef 
neluaq 
tyliyd 
ki5ias 

Questo è già abbastanza buono, ma sento che è ancora facile dimenticare come sono scritti esattamente, in modo che se passi alla scrivania di un collega e vuoi vedere uno di quelli in alto, c'è ancora un potenziale di difficoltà.

Conosco algoritmi che eseguono l'analisi del trigramma sul testo (ad esempio gli fornisci un intero libro in tedesco) e che possono generare stringhe che sembrano e sembrano parole tedesche e sono quindi più facili da gestire in generale. Ciò richiede molti dati, tuttavia, e lo rende leggermente meno adatto per l'incorporamento in un'applicazione solo per questo scopo.

Sei a conoscenza di algoritmi pubblicati che risolvono questo problema?

Grazie!

Carl

+5

Si dovrebbe leggere questo prima di iniziare a pensare a generare parole casuali: http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx – Prutswonder

+0

Ha, buono! Lo terrò a mente! –

risposta

2

non sono sicuro che questo risponde alla tua domanda, ma forse penso a quante unico numero di bug report è necessario.

Semplicemente utilizzando una chiave alfanumerica maiuscolo di quattro lettere come "BX-3D", è possibile avere 36^4 = 1,7 milioni di segnalazioni di bug.

Modifica: Ho appena visto il tuo campione. Forse i risultati potrebbero essere notevolmente migliorati se si usassero sillabe invece di consonanti e vocali.

2

Come hai detto, il tuo campione è abbastanza buono. Ma se vuoi identificatori casuali che possano essere facilmente ricordati, allora non dovresti mischiare caratteri alfanumerici e numerici. Invece, puoi scegliere di postfix una stringa alfanumerica con un paio di cifre.

Inoltre, nel tuo campione hai saggiamente escluso "o", ma hai dimenticato la "l", che puoi facilmente confondere con "1". Ti suggerisco di rimuovere la 'l' come wel. ;-)