una posiciones numeros especiales ejemplos digitos cómo contraseñas contraseña con clave caracteres alfanumericos alfanumerico alfanumerica asp.net regex asp.net-membership membership

asp.net - posiciones - cómo es una clave alfanumerica de 8 digitos



Membresía Generar Contraseña alfanumérica única contraseña? (7)

¿Cómo puedo usar Membership.GeneratePassword para devolver una contraseña que SOLAMENTE contiene caracteres alfabéticos o numéricos? El método predeterminado solo garantizará un mínimo y no un número máximo de contraseñas no alfanuméricas.


Hay un enfoque similar con la solución de Breigo. Tal vez esto no sea tan efectivo, pero tan claro y corto

string GeneratePassword(int length) { var password = ""; while (password.Length < length) { password += string.Concat(Membership.GeneratePassword(1, 0).Where(char.IsLetterOrDigit)); } return password; }


Me di cuenta de que puede haber formas de hacerlo. El método GUID es excelente, excepto que no mezcla los alfabetos MAYÚSCULAS y minúsculas. En mi caso, solo produjo minúsculas.

Así que decidí usar Regex para eliminar los no alfas y luego subscribir los resultados a la longitud que necesitaba.

string newPassword = Membership.GeneratePassword(50, 0); newPassword = Regex.Replace(newPassword, @"[^a-zA-Z0-9]", m => ""); newPassword = newPassword.Substring(0, 10);


También podría tratar de generar contraseñas y concatenar los caracteres no alfanuméricos hasta que alcance la longitud de contraseña deseada.

public string GeneratePassword(int length) { var sb = new StringBuilder(length); while (sb.Length < length) { var tmp = System.Web.Security.Membership.GeneratePassword(length, 0); foreach(var c in tmp) { if(char.IsLetterOrDigit(c)) { sb.Append(c); if (sb.Length == length) { break; } } } } return sb.ToString(); }


También prefiero el método GUID - aquí está la versión corta:

string password = Guid.NewGuid().ToString("N").Substring(0, 8);


Una forma simple de obtener una contraseña alfanumérica de 8 caracteres sería generar un guid y usarlo como base:

string newPwd = Guid.NewGuid().ToString().Substring(0, 8);

Si necesita una contraseña más larga, simplemente saltee el tablero usando subcadenas:

string newPwd = Guid.NewGuid().ToString().Substring(0, 11); newPwd = newPwd.Substring(0, 8) + newPwd.Substring(9, 2); // to skip the dash.

Si desea asegurarse de que el primer carácter sea alfa, puede reemplazarlo cuando sea necesario con una cadena fija si (newPwd [0]> = ''0'' && newPwd [0] <= ''9'') ...

Espero que alguien pueda encontrar esto útil. :-)


Yendo de la respuesta de @ SollyM, poniendo un ciclo while alrededor, para evitar el evento muy improbable de todos los personajes, o demasiados personajes como caracteres especiales, y luego subcadena lanzando una excepción.

private string GetAlphaNumericRandomString(int length) { string randomString = ""; while (randomString.Length < length) { //generates a random string, of twice the length specified, to counter the //probability of the while loop having to run a second time randomString += Membership.GeneratePassword(length * 2, 0); //replace non alphanumeric characters randomString = Regex.Replace(randomString, @"[^a-zA-Z0-9]", m => ""); } return randomString.Substring(0, length); }


string newPassword = Membership.GeneratePassword(15, 0); newPassword = Regex.Replace(newPassword, @"[^a-zA-Z0-9]", m => "9" );

Esta expresión regular reemplazará todos los caracteres no alfanuméricos con el carácter numérico 9.