Я пытаюсь создать случайную строку из 16 символов с НЕТ ДУБЛИРОВАННЫХ СИМВОЛОВ. Я хочу сказать, что это не должно быть трудно, но я застрял.Случайная строка без дубликатов
Я использую 2 метода, один для генерации ключа и другой для удаления повторяющихся символов. В основном я создал цикл while, чтобы убедиться, что сгенерированная строка имеет длину 16 символов.
С моей логикой что-то не так, потому что она просто стреляет по 16-символьной строке с дубликатами. Просто не получится.
Код:
public string RemoveDuplicates(string s)
{
string newString = string.Empty;
List<char> found = new List<char>();
foreach (char c in s)
{
if (found.Contains(c))
continue;
newString += c.ToString();
found.Add(c);
}
return newString;
}
public static string GetUniqueKey(int maxSize)
{
char[] chars = new char[62];
chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
byte[] data = new byte[1];
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
crypto.GetNonZeroBytes(data);
data = new byte[maxSize];
crypto.GetNonZeroBytes(data);
StringBuilder result = new StringBuilder(maxSize);
foreach (byte b in data)
{
result.Append(chars[b % (chars.Length)]);
}
return result.ToString();
}
string builder = "";
do
{
builder = GetUniqueKey(16);
RemoveDuplicates(builder);
lblDir.Text = builder;
Application.DoEvents();
} while (builder.Length != 16);
Спасибо! Так просто и элегантно. Только то, что я хотел. –