Is there any built in function that creates random passwords ? Asp.net simple memebership used to have a similar method
Membership.GeneratePassword()
create a password that isn't compliant with Identity validator.
I have written a simple function that consider UserManager Validator for creating a right random password to assign to user.
It simply generates random chars and check if chars satisfy Validator requirements. If the requirements aren't satisfied, it appends the remaining chars to satisfy rules.
private string GeneratePassword(MessagePasswordValidator validator)
{
if (validator == null)
return null;
bool requireNonLetterOrDigit = validator.RequireNonLetterOrDigit;
bool requireDigit = validator.RequireDigit;
bool requireLowercase = validator.RequireLowercase;
bool requireUppercase = validator.RequireUppercase;
string randomPassword = string.Empty;
int passwordLength = validator.RequiredLength;
Random random = new Random();
while (randomPassword.Length != passwordLength)
{
int randomNumber = random.Next(48, 122); // >= 48 && < 122
if (randomNumber == 95 || randomNumber == 96) continue; // != 95, 96 _'
char c = Convert.ToChar(randomNumber);
if (requireDigit)
if (char.IsDigit(c))
requireDigit = false;
if (requireLowercase)
if (char.IsLower(c))
requireLowercase = false;
if (requireUppercase)
if (char.IsUpper(c))
requireUppercase = false;
if (requireNonLetterOrDigit)
if (!char.IsLetterOrDigit(c))
requireNonLetterOrDigit = false;
randomPassword += c;
}
if (requireDigit)
randomPassword += Convert.ToChar(random.Next(48, 58)); // 0-9
if (requireLowercase)
randomPassword += Convert.ToChar(random.Next(97, 123)); // a-z
if (requireUppercase)
randomPassword += Convert.ToChar(random.Next(65, 91)); // A-Z
if (requireNonLetterOrDigit)
randomPassword += Convert.ToChar(random.Next(33, 48)); // symbols !"#$%&'()*+,-./
return randomPassword;
}
and calling:
string password = GeneratePassword(UserManager.PasswordValidator as MessagePasswordValidator);