Jump to content

Generador de cadenas alfanuméricas


Recommended Posts

Hola a todos,

 

¿Conocéis algún método para generar cadenas alfanuméricas?

 

En un trabajo necesitamos usar casi 250.000 cadenas alfanuméricas de 8 posiciones, y por supuesto todas diferentes.

 

He estado intentándolo en Excel con la ayuda de par de amigos que lo manejan bien, pero no termina de convencernos el resultado final ya que usando funciones se pueden generar códigos en formato "AAAAAAAA", "99999999" y también "A9A9A9A9" o bien variaciones igualmente rígidas de esta última, pero no consigo que la alternancia de números y letras sea también aleatoria: es decir que puedan aparecer tanto números como letras en cualquier posición sin ningún orden prefijado. No sé si me he conseguido explicarme del todo.

 

Buscando en San Google dimos con algunos métodos de generar cadenas de estas características, e incluso una web que crea listas de claves aleatorias pero que tiene el inconveniente de que o eliges números, letras o un formato que incluye todos los caracteres ascii (!"·#$%&/()=?¿... etc), por lo que tampoco sirve, la web es muy buena y genera una lista de 250.000 en unos segundos :blink:. Si no fuera por lo de incluir los caracteres que no son ni números ni letras, sería ideal.

 

La dejo por si a alguien le viene bien: http://www.minelinks.com/supercode/_soloporsusojos_.html

 

También en "Desfaciendo Entuertos" he encontrado un script muy bueno: http://desfaziendoentuertos.prepress.es/2011/06/script-generador-de-numeros-para-adobe-indesign.html, pero que no se adapta a las puñeteras condiciones. Easy Numbering tampoco puede generar cadenas con esas condiciones.

 

Imagino, por lo que he leído en algunas páginas, que utilizando algún lenguaje de programación se podrá hacer (como módulos VisualBasic en Excel o JavaScript), pero buscaba algo a mi alcance sin tener que ponerme a refrescar lo poco que sé del tema, sin la más mínima confianza en lograrlo, la verdad.

 

Un saludo y perdonad el ladrillo.

Edited by Onofre
Link to comment
Share on other sites

Me parece que esto se escapa un poco del ámbito de las artes gráficas, aunque lo vayas a utilizar para artes gráficas :)

 

No tengo claro si en el foro de ofimática (por lo de Excel) o en el de desarrollo (por lo de JavaScript o VisualBasic) estará mejor. Vamos a probar con el primero, y ya veremos qué pasa.

Link to comment
Share on other sites

http://www.random.org/strings/

 

Tiene de limite 10000 por cada vez que se hace, pero siempre puedes hacerlo varias veces y buscar posibles duplicados, cosa que dudo la verdad...

 

(o igual si la página ejecuta algún script se pueda trucar al efecto, desde el iPod como que cuesta un poco... :lol: )

 

Por otro lado, me imagino que con bash o applescript se podrá hacer en un momento pero... Mañana miro si nadie ha dado una respuesta mejor :)

 

Un saludo

Link to comment
Share on other sites

Hola,

 

Jono, yo tampoco estaba muy seguro de en qué área poner la consulta, me incliné por Artes Gráficas porque supuse que a alguien se le habría planteado un problema similar. Me parece bien que hayas movido el post. Mis disculpas.

 

Gracias Mr. Bean por el enlace. Como tú dices la limitación de 10.000 códigos no sería un problema ya que se podría hacer en varias veces hasta alcanzar el número de códigos necesario y no parece demasiado complicado comprobar si se producen duplicados y corregirlos, pero la web no lo permite hacer más de una tanda, en cuanto has hecho los primeros 10.000 te dice que has superado el límite de uso.

 

De todas maneras parece que va a valer como lo hemos hecho, alternando letra-número-letra... Si encontrara alguna otra solución la pondré aquí.

 

Gracias por el interés y un saludo.

Link to comment
Share on other sites

Holaá :)

 

Una pena que Random.org ponga como límite la IP. Si se usase un router ADSL, con resetearlo se obtiene otra y listo, pero no, no es el caso me temo... :)

 

Mientras tanto he hecho otra cosa... He preparado un pequeño AppleScript que pregunta por la cantidad de cadenas y su longitud.

 

El código es este, seguro que se puede optimizar pero bueno...

 

set x to {}
set numeroVeces to ""
set numeroCaracteres to ""
repeat until numeroVeces > "0"
display dialog "¿Cuántas claves necesita?:" default answer ""
set numeroVeces to text returned of result
if numeroVeces < "1" then display dialog "Número de veces incorrecto. El valor mínimo es 1"
end repeat

repeat until numeroCaracteres > "1"
display dialog "¿Cuántos caracteres (a-z, 0-9) necesita?" default answer ""
set numeroCaracteres to text returned of result
if numeroCaracteres < "1" then display dialog "Las claves deben tener 1 carácter o más"
end repeat

repeat numeroVeces times
repeat numeroCaracteres times
	set end of x to some item of "abcdefghijklmnopqrstuvwxyz0123456789"
end repeat
set end of x to "" & return
end repeat
set the clipboard to (x as string)
display dialog "Ya tiene sus claves en el portapapeles. Pulse Cmd-V en cualquier entrada de texto para pegarlo"

 

(La verdad que así he aprendido algo nuevo, concretamente lo del "some item of")

 

Un consejo para los que lo usen: parece que se lleva mal con cadenas muy largas, sobrecarga mucho el procesador. Como idea, sugiero ir haciendo de 20000 en 20000 o como mucho 50000. Con 50000 cadenas, de 8 caracteres como las que pide Onofre, tarda un más de un cuarto de hora (lo he parado) en un iMac 20" C2D 2,66Ghz y 2GB de RAM. Eso sí, lo pone a trabajar cosa mala, aunque creo que sólo en un núcleo...

 

Así que más que para ayudar al amigo Onofre (que lo puede usar, pero que le eche paciencia jeje :lol: ) queda más para generar contraseñas y esas cosas. Por cierto, si modificamos lo que viene entre comillas con eso de "abcd..." se pueden usar los caracteres que se quiera. Luego habría que analizar si AppleScript realmente genera cadenas aleatorias o usa alguna fórmula o algo...

 

Si tengo tiempo, miro como hacerlo en bash.

Edited by Mr. Bean
Link to comment
Share on other sites

Hola de nuevo,

 

Gracias por el applescript :D, de momento lo he puesto a funcionar, cambiando las letras de la cadena de caracteres a mayúsculas. Lleva ejecutándose unos 15 minutos, como ya advertías... paciencia que son muchos códigos, cuando acabe contaré cómo ha ido.

 

Un amigo me ha pasado una hoja de Excel que parece que también lo hace. Aún no la he probado pero conociendo a mi colega seguro que va bien también. Si alguien está interesado le puedo pasar el fichero.

 

Un saludo y gracias otra vez.

Edited by Onofre
Link to comment
Share on other sites

Hola de nuevo,

 

Gracias por el applescript :D, de momento lo he puesto a funcionar, cambiando las letras de la cadena de caracteres a mayúsculas. Lleva ejecutándose unos 15 minutos, como ya advertías... paciencia que son muchos códigos, cuando acabe contaré cómo ha ido.

 

Un amigo me ha pasado una hoja de Excel que parece que también lo hace. Aún no la he probado pero conociendo a mi colega seguro que va bien también. Si alguien está interesado le puedo pasar el fichero.

 

Un saludo y gracias otra vez.

 

Uf, haciendo pruebas con 10000 hace tiempos razonables (unos 5 minutines), pero en cuanto incrementas más allá de 30000 no sé qué le pasa que se eterniza. Igual son muchos datos para que los maneje Applescript, no sé.

 

La hoja de excel, pese a que no sea mi programa favorito me puede interesar, a ver qué tal que así aprendo :)

Link to comment
Share on other sites

  • 9 years later...

Aunque hace 9 años de la consulta, he modificado lo justo del script de Mr. Bean para que mejore su velocidad.

AppleScript nunca se ha caracterizado por su velocidad pero ahora el nuevo script anda, el viejo se arrastraba. En mi iMac del 2009, para 10.000 de 8 cifras ha pasado de 173 segundos a solo 3 seg.

set llistat_Codis to {}
set numeroVeces to ""
set numeroCaracteres to ""
set caracters_Disponibles to "abcdefghijklmnopqrstuvwxyz0123456789"


repeat until numeroVeces > "0"
	display dialog "¿Cuántas claves necesita?:" default answer "1"
	set numeroVeces to text returned of result
	if numeroVeces < "1" then display dialog "Número de veces incorrecto. El valor mínimo es 1"
end repeat

repeat until numeroCaracteres > "1"
	display dialog "¿Cuántos caracteres (a-z, 0-9) necesita?" default answer "1"
	set numeroCaracteres to text returned of result
	if numeroCaracteres < "1" then display dialog "Las claves deben tener 1 carácter o más"
end repeat

repeat numeroVeces times
	set codi_nou to ""
	repeat numeroCaracteres times
		set codi_nou to codi_nou & some character of caracters_Disponibles
	end repeat
	set end of llistat_Codis to codi_nou
end repeat

set AppleScript's text item delimiters to the return

set the clipboard to (llistat_Codis as string)
display dialog "Ya tiene sus claves en el portapapeles. Pulse Cmd-V en cualquier entrada de texto para pegarlo"

 

  • Gracias 1
Link to comment
Share on other sites

Hace 23 minutos, McDaniel dijo:

Solo para los mortales como yo, puedes recordarnos cómo usar el script por favor.

  • Abrir Editor de Scripts
  • Copiar el script en una nueva ventana de script. Lo normal es que abra una nueva si no tienes nada abierto. Actualmente acepta AppleScript i JavaScript, en este caso seleccionar Applescript.
  • Guardarlo
  • Ejecutarlo apretando el botón del triángulo 
Link to comment
Share on other sites

Versión mejorada para grandes cantidades (múltiples de 500). Creo que he encontrado la razón por la que el tiempo de ejecución no aumentaba proporcionalmente al aumento de la cantidad, el manejo de listas muy extensas. Es proporcional si se mantiene en 500 elementos.

-- Segona versió

set llistat_Codis to {}
set numeroVeces to ""
set numero_Intermedi to "500"
set numeroCaracteres to ""
set caracters_Disponibles to "abcdefghijklmnopqrstuvwxyz0123456789"
set AppleScript's text item delimiters to the return

repeat until numeroVeces > "0"
	display dialog "¿Cuántas claves necesita?:" default answer "1"
	set numeroVeces to text returned of result
	if numeroVeces < "1" then display dialog "Número de veces incorrecto. El valor mínimo es 1"
end repeat

repeat until numeroCaracteres > "1"
	display dialog "¿Cuántos caracteres (a-z, 0-9) necesita?" default answer "1"
	set numeroCaracteres to text returned of result
	if numeroCaracteres < "1" then display dialog "Las claves deben tener 1 carácter o más"
end repeat

repeat numeroVeces / numero_Intermedi times
	set llistat_Intermedi to {}
	repeat numero_Intermedi times
		set codi_nou to ""
		repeat numeroCaracteres times
			set codi_nou to codi_nou & some character of caracters_Disponibles
		end repeat
		set end of llistat_Intermedi to codi_nou
	end repeat
	set end of llistat_Codis to (llistat_Intermedi as string)
end repeat

set the clipboard to (llistat_Codis as string)
display dialog "Ya tiene sus claves en el portapapeles. Pulse Cmd-V en cualquier entrada de texto para pegarlo"

Ejemplo de tiempos:

Mi primera versión

  • 1 segundo para 5.000 / 8
  • 16 segundos para 25.000 / 8

Esta versión

  • 3 segundos para 25.000 / 8
  • 27 segundos para 250.000 / 8
Edited by APB
  • Me gusta 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.