随机重新排列 pass1 和 pass2 元素(参见此处或此处),然后使用 linq 的 Zip 并借助 .Take所需的字符数进行剪切。
例如:
void Main()
{
string pass1 = "123456789";
string pass2 = "QWERTYUIOPASDFGHJKLZXCVBNM";
this.GenPass(pass1.Shuffle(), pass2.Shuffle(), 10).Dump();
}
public string GenPass(string pass1, string pass2, int maxChar)
{
var result = pass1.Zip(pass2, (x, y) => $"{x}{y}");
//result.Dump();
var joined = string.Join("", result).Take(maxChar);
return new string(joined.ToArray());
}
public static class Ext1
{
public static string Shuffle(this string str)
{
char[] array = str.ToCharArray();
Random rng = new Random();
int n = array.Length;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
var value = array[k];
array[k] = array[n];
array[n] = value;
}
return new string(array);
}
}
int length = 12; // длина
var random = new Random();
var result = string.Join("",Enumerable.Range(0, length).Select(i => i%2==0 ? (char)('A'+random.Next(26))+"" : random.Next(1, 10)+""));
好吧,或者与解释相同:
var result = string.Join("", // создаем строку
Enumerable.Range(0, length) // из последовательности длины length
.Select(i =>
i%2==0 ? // на четных местах
(char)('A'+random.Next(26))+"" : // генерируем букву
random.Next(1, 10)+"") // на нечетных цифру
);
使用Random rnd = new Random(0);?
Random必须使用,但必须使用空的构造函数。采用数字 ( Random (int Seed)) 的构造函数使用该数字作为初始状态。这Random将始终产生相同的数字序列。
随机重新排列 pass1 和 pass2 元素(参见此处或此处),然后使用 linq 的 Zip 并借助
.Take所需的字符数进行剪切。例如:
或许有什么需要改进的地方,刚刚解决了“额头上”的问题。
我写了一个笨拙但简单易懂的解决方案:
下面的示例限制为 18 个字符(可以扩展)。
我们都知道在这些事情上不需要漂亮、正确和可读的代码。您需要一个 LINQ 单行代码,您可以不经意间将其复制到代码中并立即发送到生产环境。
实际上,这里是:
好吧,或者与解释相同:
Random必须使用,但必须使用空的构造函数。采用数字 (Random (int Seed)) 的构造函数使用该数字作为初始状态。这Random将始终产生相同的数字序列。PS
pass1并pass2没有使用它,而是生成英文字母的大写字母和 1 到 9 的数字(顺便说一下,为什么不使用 0?)。