Generar una contraseña aleatoria con VBA

Recientemente alguien me ha preguntado cómo generar una contraseña completamente aleatoria en Excel. Se me ha ocurrido un script relativamente sencillo que utiliza las funciones RND para generar números aleatorios y CHR para convertir esos números en letras (o cualquier otro caracter)

Para hacerlo más sencillo, consideraremos simplemente las letras mayúsculas y las minúsculas (sin contar la Ñ, que está por otro lado del campo de caracteres)

Lo primero que haremos será definir la longitud de la cadena que utilizaremos como contraseña. En el ejemplo lo tengo puesto como un valor fijo (en este caso 8), pero se podría leer de cualquier celda que sirva para modificar el parámetro. En nuestro caso es el valor máximo del ciclo FOR

Dim a As Long
Dim pass As String

pass = ""
For a = 1 To 8

        'Código

Next

Una vez definido el ciclo que generará cada una de las letras de la contraseña, que almacenaré en la variable pass, vamos a meternos con el meollo del asunto.
Lo primero es saber qué valores necesito obtener. Como quiero letras A-Z y a-z, sé que los rangos que necesito son los siguientes:
A-Z : 65-90
a-z : 97-122

En ambos casos, incluidos los extremos.

Al ser dos rangos diferentes de valores, y como son iguales, les voy a asignar una probabilidad igual para que se dé cada uno. Esto lo hago con la función RND. Como sabrás, RND devuelve un valor aleatorio (o más bien pseudoaleatorio) que estará entre 0 y 1. Simplemente asignaré el rango de mayúsculas si el valor devuelto por RND es mayor que 0,5, y minúsculas si es al contrario.

Sería algo así como:

Dim a As Long
Dim pass As String
Dim upper As Boolean
Dim min As Long
Dim max As Long

pass = ""
For a = 1 To 8
     upper = (Rnd > 0.5)
     If upper Then
         min = 65
         max = 90
     Else
         min = 97
         max = 122
     End If
     'Código
 Next

¿Y para qué defino los valores mínimo y máximo?

Porque hay una manera de conseguir que la función RND devuelva un valor entre el mínimo y el máximo. Sería así:

Int((max – min + 1) * Rnd+ min)

Esta fórmula nos devolverá un valor entero aleatorio entre min y max. Si lo convertimos en un carácter con la función CHR y lo colocamos en su sitio, ya tenemos la variable pass con la contraseña:

Dim a As Long
Dim pass As String
Dim upper As Boolean
Dim min As Long
Dim max As Long

pass = ""
 For a = 1 To 8
     upper = (Rnd > 0.5)
     If upper Then
         min = 65
         max = 90
     Else
         min = 97
         max = 122
     End If
 pass = pass + Chr(Int((max - min + 1) * Rnd + min))
 Next

Ya solo nos queda hacer lo que tengamos que hacer con el valor obtenido. Podemos imprimirlo en el panel de Inmediato:

debug.print pass

O podemos colocarlo en alguna celda:

cells(3,5).value = pass

O, como prometíamos con el nombre que le hemos dado, podemos proteger una hoja frente a ediciones indeseadas… Siempre que me prometas que tendrás cuidado. Una vez protegida de esta manera, una hoja no podrá ser desprotegida (al menos fácilmente). Esto se hace con el código siguiente:

[sociallocker]Activesheet.protect pass[/sociallocker]

 

Un saludo

(Visited 5.006 times, 1 visits today)

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies