C# - 生成10个字符随机字母数字字符串的最有效方法是什么?

时间:2011-06-27 20:38:07

标签: c# string random

在c#中生成10个字符的随机字母数字字符串的最有效方法是什么?

4 个答案:

答案 0 :(得分:4)

http://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename.aspx

string randomName = Path.GetRandomFileName();
randomName = randomName.Replace(".", string.Empty);

// take substring...

例如:

?Path.GetRandomFileName();
"rlwi1uew.5ha"
?Path.GetRandomFileName();
"gcwhcoiy.vxl"
?Path.GetRandomFileName();
"2pzyljzf.k41"
?Path.GetRandomFileName();
"kyjzcccf.d3c"

答案 1 :(得分:3)

var buffer = new byte[5];
new Random().NextBytes(buffer);
Console.WriteLine(string.Join("", buffer.Select(b => b.ToString("X2"))));

答案 2 :(得分:-2)

var buffer = new byte[15];
new Random().NextBytes(buffer);
string rnd = Convert.ToBase64String (buffer).Substring (10);

我看到的唯一问题是它还使用+/,所以你也必须用某些东西替换它们。

string rnd = Convert.ToBase64String (buffer)
   .Substring (10)
   .Replace ('/', '0')
   .Replace ('+', '1');

答案 3 :(得分:-4)

Guid很快

Guid.NewGuid().ToString("N").Substring(0, 10);

From MSDN

  

GUID是一个128位整数(16字节),可以在需要唯一标识符的所有计算机和网络中使用。这样的标识符被复制的可能性非常低。

对于十亿个请求,它可能不是唯一的,因为您只需要10个字符。但它会生成一个从0到9和A到F的字符串。


效果

使用

进行测试
public static void Test(Action a)
{
    Stopwatch sw = new Stopwatch();
    sw.Start();

    for (var i = 0; i < 10000; ++i)
        a();

    sw.Stop();

    Console.WriteLine("ms: {0} ticks: {1}", sw.ElapsedMilliseconds, sw.ElapsedTicks);
}

Guid方法

Test(() =>
{
    var xxx = Guid.NewGuid().ToString("N").Substring(0, 10);
});

// Result
// 6     ms
// 17273 ticks

字节方法

Test(() =>
{
    var buffer = new byte[5];
    new Random().NextBytes(buffer);
    var x = string.Join("", buffer.Select(b => b.ToString("X2")));
});

// Result:
// 57     ms
// 165642 ticks

您可以在high speedhigh reliability之间选择。