ASP.NET C#中如何生成字母数字OTP

5
public void generate()
{
    string alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string small_alphabets = "abcdefghijklmnopqrstuvwxyz";
    string numbers = "1234567890";
    string characters = numbers;
    characters += alphabets + small_alphabets + numbers;

    int length =6;
    string opt = string.Empty;
    for (int i = 0; i < length; i++)
    {
        string character = string.Empty;
        do
        {
            int index = new Random().Next(0, characters.Length);
            character = characters.ToCharArray()[index].ToString();
        } while (otp.IndexOf(character) != -1);
        otp += character;
    }
    string str= otp;
}

这是我的代码,但对我来说没有起作用。 我想尝试小写字母、大写字母和0到9的数字组合。

1
  1. 你正在紧密循环中创建一个新的“Random”实例,因此它可能会获得相同的种子。
  2. 首先不要使用“Random”。请使用来自“RandomNumberGenerator.Create()”的CSPRNG。
  3. 您没有解释“未起作用”的含义。
- vcsjones
你能详细说明一下你的代码为什么“不工作”吗?你期望发生什么,实际上又发生了什么?如果你遇到了异常或错误,请在帖子中提供它发生的行以及异常或错误的详细信息。请编辑这些细节,否则我们可能无法提供帮助。 - gunr2171
可能是如何在C#中生成随机整数?的重复问题。 - Manish Singh
2个回答

9
这里是代码:
var chars1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
var stringChars1 = new char[6];
var random1 = new Random();

for (int i = 0; i < stringChars1.Length; i++)
{
    stringChars1[i] = chars1[random1.Next(chars1.Length)];
}

var str= new String(stringChars1);

5
尽管这段代码片段可能解决了问题,包括一些解释真的有助于提高你的帖子质量。请记住,你是为未来的读者回答问题,而这些人可能不知道你提供代码建议的原因。此外,请尽量避免在代码中添加过多的解释性注释,这会降低代码和解释的可读性! - gunr2171

3

这段代码将为您生成n位数字的一次性密码。

public static int GenerateOTP(int digits)
    {
        if (digits < 3)
            return new Random().Next(10, 99);
        else
            return new Random().Next(MultiplyNTimes(digits), MultiplyNTimes(digits + 1) - 1);
    }

private static int MultiplyNTimes(int n)
    {
        if (n == 1)
            return 1;
        else
            return 10 * MultiplyNTimes(n - 1);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接