日期:2014-05-17 浏览次数:20561 次
for(int i=0;i<n n是你要生成几位;i++)
{
然后用 Random rnd = new Random()
然后 数组[rnd.next(0,数组.Length)]
}
------解决方案--------------------
先把temp初始化为allCharArray数组合法下标以外的值,-1
然后产生一个新的整数作为随机数发生器的“种子”,产生一个0~34的整数,做为下标从数组中取出一个字符,添加到最终结果randomNum的后面。
大意就是这样吧。
------解决方案--------------------
/// <summary>
/// 产生一个指定长度的随机字符串
/// 由0-9,A-Z组成(除V)
/// </summary>
/// <param name="NumCount">随机字符串长度</param>
/// <returns>随机字符串</returns>
private string CreateRandomNum(int NumCount)
{
//定义字符来源
string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
string[] allCharArray = allChar.Split(',');//将字符来源转换成数组,方便获取每一位
string randomNum = "";//随机字符串
int temp = -1;//是否重新生成随机种子
Random rand = new Random();
for (int i = 0; i < NumCount; i++)
{
//除了第一次
if (temp != -1)
{
//动态自定随机种子
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
//生成一个小于35的非负随机数(因为字符源数组最大小标为34)
int t = rand.Next(35);
//如果此次生成的随机数和上次一样,则重新调用本方法重新开始生成。
if (temp == t)
{
return CreateRandomNum(NumCount);
}
temp = t;//记录当前产生的随机数(用来判断是否为第一次和判断是否和上一次重复)
//获取并记录产生的随机字符
randomNum += allCharArray[t];
}
return randomNum;
}
------解决方案--------------------
那个连接解释很详细