Función escrita en VBScript que genera secuencias de caracteres aleatorias, muy útil para generar contraseñas para los usuarios de un sitio Web
Aquí os presento una función escrita en VBScript que os genera secuencias de caracteres aleatorias, muy útil para generar contraseñas para los usuarios de tu sitio Web. Genera contraseñas con y sin caracteres repetidos y de la longitud que queramos. ¡Números aleatorios en VBScript!
Introducción
Nuestra función, PwdAleatorio va a recibir como argumentos:
(El código de la función al completo está disponible al final del artículo)
Números aleatorios
VBscript nos provee de un generador de números aleatorios. Debemos utilizar Randomize (instrucción, se pone a secas) para inicializar una semilla para generar los números aleatorios, y después la función Rnd que devuelve un número aleatorio entre 0 y 1. Si multiplicamos este valor por un número, obtenemos números mayores que cero ¿verdad? Y si queremos números enteros, como en nuestro caso, podemos utilizar la función Int que devuelve sólo la parte entera del número, sin decimales.
Por ejemplo:
<% Randomize Response.Write ( int(rnd*10)) %>
nos devuelve números aleatorios entre 0 y 9: rnd nos da un 0.534 por ejemplo. Lo multiplicamos por 10 y tenemos 5.34. Por último int nos devuelve el 5. Si quisiéramos entre 1 y 10, tendríamos que sumar 1.
PwdAleatorio al desnudo
Para obtener una contraseña, necesitamos elegir caracteres (letras y dígitos, por ejemplo). Para hacer esto, definimos un vector con todos los caracteres que queremos utilizar, mediante la función Array: Array("a", "b",.....). Después, elegimos números aleatorios entre 0 y el máximo índice de este vector, y tenemos nuestros caracteres. ¿Fácil verdad?
Si queremos evitar que no se repitan caracteres, tenemos que llevar la cuenta de cuáles ya hemos escogido. Nos creamos otro vector para ir guardando los números aleatorios. Cuando escogemos uno, comprobamos que no existe ya en el vector antes de incluirlo.
Finalmente, devolvemos la cadena utilizando Join. Esta función une todos los elementos de un vector, separándolos con un delimitador que le especificamos. Si ponemos dos dobles comillas, simplemente une todos los elementos, que es lo que queremos.
Para utilizar la función en vuestras páginas ASP, simplemente tenéis que escribir:
<%
Dim strPassword
strPassword = PwdAleatorio(10, False)
Response.Write("Te hemos asignado esta contraseña: " & strPassword)
%>
En resumen
Esta sencilla función es un buen ejemplo de uso de los números aleatorios. Se me olvidaba comentaros que podéis personalizarla a vuestro gusto, incluyendo otros caracteres válidos para las contraseñas, como #, _, -, ?, !... Sólo tenéis que añadirlas a la lista
Código de la función
'==========================================================
Function PwdAleatorio ( Longitud, Repetir )
'----------------------------------------------------------
' por Carlos de la Orden Dijs, Abril 2001 - 100% gratis! ;-)
'----------------------------------------------------------
' Devuelve una cadena con una secuencia de caracteres
' aleatoria, de longitud especificada.
' Si Repetir = True la secuencia puede contener caracteres
' repetidos. Si Repetir = False, todos los caracteres son
' únicos.
' Para añadir más caracteres posibles, añadirlos al vector
' vCaracteres simplemente separando como comas, como los
' que están ya escritos, y la función los escogerá.
'----------------------------------------------------------
Dim vPass(), I, J ' nuestro vector y dos contadores
Dim vNumeros() ' vector para guardar lo que llevamos
Dim n, bRep
Dim vCaracteres ' vector donde están los posibles caract.
vCaracteres = Array("a","b", "c", "d", "e", "f", "g", "h", _
"i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", _
"u", "v", "w", "x", "y", "z", "A","B", "C", "D", "E", "F", _
"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", _
"S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", _
"5", "6", "7", "8", "9", "0")
'Establezco la longitud del vector
Redim vPass(Longitud-1)
'Y del vector auxiliar que guarda los caracteres ya escogidos
Redim vNumeros(Longitud-1)
I = 0
'Inicializo los nºs aleatorios
Randomize
'Hasta que encuentre todos los caracteres
do until I = Longitud
'Hallo un número aleatorio entre 0 y el máximo indice
' del vector de caracteres.
n = int(rnd*Ubound(vCaracteres))
'Si no puedo repetir...
if not Repetir then
bRep = False
'Busco el numero entre los ya elegidos
for J = 0 to UBound(vNumeros)
if n = vNumeros(J) then
'Si esta, indico que ya estaba
bRep = True
end if
next
'Si ya estaba, tengo que repetir este caracter
'así que resto 1 a I y volvemos sobre la misma
'posición.
if bRep then
I = I - 1
else
vNumeros(I) = n
vPass(I) = vCaracteres(n)
end if
else
'Me da igual que esté o no repetido
vNumeros(I) = n
vPass(I) = vCaracteres(n)
end if
'Siguiente carácter!
I = I + 1
loop
'Devuelvo la cadena. Join une los elementos de un vector
'utilizando como separador el segundo parámetro: en este
'caso, nada -> "".
PwdAleatorio = Join(vPass, "")
End Function 'PwdAleatorio
'==========================================================
Usuarios que han visto este tema también han visto...
- Lectura y escritura de archivos en ASP
- Chequear que exista un fichero con ASP
- Lectura y Escritura de Archivos
- Crear Gráficos de Barras en ASP
- Optimizar paginas ASP
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.