【发布时间】:2011-10-13 00:38:43
【问题描述】:
我的 ASP.NET 应用程序要求我生成大量随机字符串,每个字符串至少包含 1 个字母和数字字符,并且总体上应该是字母数字。 为此,如果随机字符串是数字,我的逻辑是再次生成代码:
public static string GenerateCode(int length)
{
if (length < 2 || length > 32)
{
throw new RSGException("Length cannot be less than 2 or greater than 32.");
}
string newcode = Guid.NewGuid().ToString("n").Substring(0, length).ToUpper();
return newcode;
}
public static string GenerateNonNumericCode(int length)
{
string newcode = string.Empty;
try
{
newcode = GenerateCode(length);
}
catch (Exception)
{
throw;
}
while (IsNumeric(newcode))
{
return GenerateNonNumericCode(length);
}
return newcode;
}
public static bool IsNumeric(string str)
{
bool isNumeric = false;
try
{
long number = Convert.ToInt64(str);
isNumeric = true;
}
catch (Exception)
{
isNumeric = false;
}
return isNumeric;
}
在调试时,它工作正常,但是当我要求它创建 10,000 个随机字符串时,它无法正确处理它。当我将该数据导出到 Excel 时,我发现平均至少有 20 个数字字符串。
我的代码或 C# 有问题吗? - 我的。
如果有人在寻找代码,
public static string GenerateCode(int length)
{
if (length < 2)
{
throw new A1Exception("Length cannot be less than 2.");
}
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var random = new Random();
var result = new string(
Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)])
.ToArray());
return result;
}
public static string GenerateAlphaNumericCode(int length)
{
string newcode = string.Empty;
try
{
newcode = GenerateCode(length);
while (!IsAlphaNumeric(newcode))
{
newcode = GenerateCode(length);
}
}
catch (Exception)
{
throw;
}
return newcode;
}
public static bool IsAlphaNumeric(string str)
{
bool isAlphaNumeric = false;
Regex reg = new Regex("[0-9A-Z]+");
isAlphaNumeric = reg.IsMatch(str);
return isAlphaNumeric;
}
感谢大家的想法。
【问题讨论】:
-
只是猜测,但可能是你,而不是 C#。
-
我看不出代码有什么问题。好吧,实际上,生成大量随机字符串非常慢,但我稍后会谈到。与此同时,你真的有你的代码来生成 10,000 个字符串吗?我想看看。这对我来说似乎工作得很好。