我正在制作一个密码生成器,它需要以随机顺序制作一串大写和小写字母givin。 max和min值由两个滑块指定。
我想放弃两个范围(65,90)和(97,122)的int变量,它返回charachter的数字,而不是使用两个具有不同范围的变量。
当我使用范围(65,122)时,在生成密码时会给出我不想要的字符。
private void btnPaswoord_Click(object sender, RoutedEventArgs e)
{
GenereerPaswoord();
}
private void GenereerPaswoord()
{
int iMin = Convert.ToInt32(sldMin.Value);
int iMax = Convert.ToInt32(sldMax.Value);
txtPasw.Text = GeefPaswoord(iMin, iMax );
}
private string GeefPaswoord(int iMin, int iMax)
{
string sPaswoord ="";
if (sldMin.Value <= sldMax.Value)
{
int iLengtePaswoord = moWillekeurig.Next(iMin, iMax + 1);
for (int iTeller = 0; iTeller < iLengtePaswoord; iTeller ++ )
{
int iAsciiWaarde = moWillekeurig.Next(65, 123);
char cLetter = (char)iAsciiWaarde;
sPaswoord = sPaswoord + cLetter;
}
}
else
{
sldMin.Value = sldMax.Value;
}
return sPaswoord;
}
答案 0 :(得分:0)
在这种情况下,范围很小,因此您可以生成一个字符数组,其中包含您可能要在密码中使用的所有有效字符,并从那里绘制:
var passwordChars =
Enumerable.Range(65, 26)
.Concat(Enumerable.Range(90, 26))
.Select(Convert.ToChar).ToArray();;
var password = new string(
Enumerable.Range(1, iLengtePaswoord)
.Select(_ => moWillekeurig.Next(passwordChars.Length))
.Select(x => passwordChars[x]));
要精确回答您的问题,您可以使用所谓的拒绝抽样。也就是说,你绘制随机数,直到得到满足你标准的数字:
int iAsciiWaarde;
do
{
iAsciiWaarde = moWillekeurig.Next(65, 123);
} while (iAsciiWaarde <= 90 || iAsciiWaarde >= 96);