在c#中生成10个字符的随机字母数字字符串的最有效方法是什么?
答案 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);
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);
}
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 speed
或high reliability
之间选择。