Если они не должны быть случайными, а только уникальными, тогда этот код работает с использованием выходных данных одометра.
public class Class1
{
List<char> _chars = new List<char>() { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2','3','4', '5', '6', '7', '8', '9', '0' };
private static int[] index = new int[6] {0, 0, 0, 0, 0, 0};
private const int charMax = 35;
public string UniqueString()
{
if (index[5] > charMax)
{
IncromentParent(5);
}
StringBuilder result = new StringBuilder();
result.Append(_chars[index[0]]);
result.Append(_chars[index[1]]);
result.Append(_chars[index[2]]);
result.Append(_chars[index[3]]);
result.Append(_chars[index[4]]);
result.Append(_chars[index[5]]);
index[5]++;
return result.ToString();
}
private void IncromentParent(int active)
{
if (active == 0)
throw new Exception("out of numbers");
int parent = active - 1;
index[active] = 0;
index[parent]++;
if (index[parent] > charMax)
IncromentParent(parent);
}
}
А вот проходной юнит-тест, но для его запуска требуется много времени ...
[TestMethod]
public void MyTestMethod()
{
Class1 target = new Class1();
List<string> results = new List<string>();
for (int i = 0; i < 100000; i++)
{
string result = target.UniqueString();
if (!results.Contains(result))
results.Add(result);
else
Assert.Fail(string.Format("The string '{0}' is already in the list", result));
}
Console.WriteLine(results.Count.ToString());
}