在模拟停车场数据时,需保证生成的车牌号均不相同,于是想到一下方法,记录以备后面查看:
private string RndomStr(int codeLength)
{
//组成bai字符串的字符集合 0-9数字、大小du写字母/*a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,*/
string chars = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] charArray = chars.Split(new System.Char[] { ',' });
string code = "";
int temp = -1;//记录上次随机数值,尽量避免生产几个一样的随dao机数
System.Random rand = new System.Random();
//采用一个简单的算法以保证生成随机数的不同
for (int i = 1; i < codeLength + 1; i++)
{
if (temp != -1)
{
rand = new System.Random(i * temp * unchecked((int)System.DateTime.Now.Ticks));//初始化随机类
}
int t = rand.Next(61);
if (temp == t)
{
return RndomStr(codeLength);//如果获取的随机数重复,则递归调用
}
temp = t;//把本次产生的随机数记录起来
code += SwithToUpperStr(charArray[t]);//随机数的位数加一
}
if (SaveCreateStrDic.ContainsKey(code))
{
return RndomStr(codeLength);
}
SaveCreateStrDic[code] = code;
return code;
}
private string SwithToUpperStr(string testStr,bool isToUpper=true)
{
if (isToUpper)
{
testStr = testStr.ToUpper();
}
else
{
testStr = testStr.ToLower();
}
return testStr;
}