随机字符串生成器不重复

时间:2016-11-22 03:13:29

标签: c# asp.net random

我一直在使用这个随机字符串生成器。但我的问题是这个随机字符串生成器正在重复。我听说过使用shuffle方法,但我不知道如何在我的代码中实现它。任何帮助将主要受到赞赏。

private static Random random = new Random();
public static string RandomString(int length)
{
    const string chars = "0123456789";
    return new string(Enumerable.Repeat(chars, length)
      .Select(s => s[random.Next(s.Length)]).ToArray());
}

public static string RandomString2(int length)
{
    const string chars = "AB";
    return new string(Enumerable.Repeat(chars, length)
      .Select(s => s[random.Next(s.Length)]).ToArray());
}

然后在页面加载中我实际上调用了我的2个方法并将它们组合在一个文本框中。

string dummy = RandomString(1);
string dummy2 = RandomString2(1);
txtTagNumber.Text = dummy2.ToString() + dummy.ToString();

2 个答案:

答案 0 :(得分:1)

这可能适合你。

Random random = new Random();
const string numchars = "0123456789";
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
List<string> randStr = new List<string>();
for(int i = 0; i <= 10; i++)
{
    string AlphaRandom = new string(Enumerable.Repeat(chars, 1)
      .Select(s => s[random.Next(s.Length)]).ToArray());

    string NumberRandom = new string(Enumerable.Repeat(numchars, 1)
      .Select(s => s[random.Next(s.Length)]).ToArray());

    if(randStr.Contains(AlphaRandom + NumberRandom))
    {
        i--;
    }
    else
    {
        randStr.Add(AlphaRandom + NumberRandom);
        Console.WriteLine(randStr[i]);
    }
}

创建一个随机类型的random,然后为字母表获取2个字符串,为数字创建另一个字符串。创建了一个字符串列表,将所有生成的随机字符串添加到其中。在循环中,我试图生成10个随机字符串。检查Random String列表是否包含先前生成的字符串。如果是,则减小i的值,使其仍然生成10个字符串。如果找不到匹配项,则将随机字符串添加到列表中。

希望这有帮助

答案 1 :(得分:0)

另一种方法是创建所有选择的列表。然后,每当用户做出选择时,将其从列表中删除。从该列表中选择随机索引以仅产生唯一选择:

[WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public void getPolicyDetails(string CustId, string PolicyType)
    {
        JavaScriptSerializer js = new JavaScriptSerializer();
        Context.Response.Clear();
        Context.Response.ContentType = "application/json";
        clsPolicy data = new clsPolicy();
        try
        {
            string policyTxt = "";
            //get PolicyTxt from Database
            data.Message = policyTxt.ToString();
        }
        catch (Exception ex)
        {
        }
        Context.Response.Write(js.Serialize(data));
    }