//生成各类随机密码,包括纯字母,纯数字,带特殊字符等,除非字母大写密码类型,其余方式都将采用小写密码
static string MakeRandomPassword(string pwdType, int length)
{
//定义密码字符的范围,小写,大写字母,数字以及特殊字符
string lowerChars = "abcdefghijklmnopqrstuvwxyz";
string upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string numnberChars = "0123456789";
string specialCahrs = "~!@#$%^*()_+|-=,./[]{}:;':"; //"" 转义字符不添加 "号不添加
string tmpStr = "";
int iRandNum;
Random rnd = new Random();
length = (length < 6) ? 6 : length; //密码长度必须大于6,否则自动取6
// LOWER为小写 UPPER为大写 NUMBER为数字 NUMCHAR为数字和字母 ALL全部包含 五种方式
//只有当选择UPPER才会有大写字母产生,其余方式中的字母都为小写,避免有些时候字母不区分大小写
if (pwdType == "LOWER")
{
for (int i = 0; i < length; i++)
{
iRandNum = rnd.Next(lowerChars.Length);
tmpStr += lowerChars[iRandNum];
}
}
else if (pwdType == "UPPER")
{
for (int i = 0; i < length; i++)
{
iRandNum = rnd.Next(upperChars.Length);
tmpStr += upperChars[iRandNum];
}
}
else if (pwdType == "NUMBER")
{
for (int i = 0; i < length; i++)
{
iRandNum = rnd.Next(numnberChars.Length);
tmpStr += numnberChars[iRandNum];
}
}
else if (pwdType == "NUMCHAR")
{
int numLength = rnd.Next(length);
//去掉随机数为0的情况
if (numLength == 0)
{
numLength = 1;
}
int charLength = length - numLength;
string rndStr = "";
for (int i = 0; i < numLength; i++)
{
iRandNum = rnd.Next(numnberChars.Length);
tmpStr += numnberChars[iRandNum];
}
for (int i = 0; i < charLength; i++)
{
iRandNum = rnd.Next(lowerChars.Length);
tmpStr += lowerChars[iRandNum];
}
//将取得的字符串随机打乱
for (int i = 0; i < length; i++)
{
int n = rnd.Next(tmpStr.Length);
//去除n随机为0的情况
//n = (n == 0) ? 1 : n;
rndStr += tmpStr[n];
tmpStr = tmpStr.Remove(n, 1);
}
tmpStr = rndStr;
}
else if (pwdType == "ALL")
{
int numLength = rnd.Next(length - 1);
//去掉随机数为0的情况
if (numLength == 0)
{
numLength = 1;
}
int charLength = rnd.Next(length - numLength);
if (charLength == 0)
{
charLength = 1;
}
int specCharLength = length - numLength - charLength;
string rndStr = "";
for (int i = 0; i < numLength; i++)
{
iRandNum = rnd.Next(numnberChars.Length);
tmpStr += numnberChars[iRandNum];
}
for (int i = 0; i < charLength; i++)
{
iRandNum = rnd.Next(lowerChars.Length);
tmpStr += lowerChars[iRandNum];
}
for (int i = 0; i < specCharLength; i++)
{
iRandNum = rnd.Next(specialCahrs.Length);
tmpStr += specialCahrs[iRandNum];
}
//将取得的字符串随机打乱
for (int i = 0; i < length; i++)
{
int n = rnd.Next(tmpStr.Length);
//去除n随机为0的情况
//n = (n == 0) ? 1 : n;
rndStr += tmpStr[n];
tmpStr = tmpStr.Remove(n, 1);
}
tmpStr = rndStr;
}
//默认将返回数字类型的密码
else
{
for (int i = 0; i < length; i++)
{
iRandNum = rnd.Next(numnberChars.Length);
tmpStr += numnberChars[iRandNum];
}
}
return tmpStr;
}