超级难题,在一个Web系统中,怎样产生7为数字。使各个用户产生的都不重复这个数字是用来作为数据库中的ID的。不能重复。(条件限制,不能用数据库中的自增字段)
解决方案 »
- Asp.net计数器插入位置
- SiteMapPath如何突出显示最后一级目录
- .net 调用java webservice 郁闷问题,不知道.net 还是 java问题
- 100分求tcp/ip sockets udp教程,不是实例
- 有关owc的使用,如何不用Recordset生成多条趋势图?
- ascx中如何弹出一个窗口(c# webForm)
- ASP.net 的问题
- 请问:如何配置Python 才能使 WinCVS 正常运行?
- 为什么会这样?直接写中文不是乱码,写textbox中的中文到文件中为乱码?
- 关于DataGrid的问题
- GridView 中如何确认选中行。。
- 弱弱的问题 大大的分 关于在线发邮件
/// 获取随机字符串根据guid生成
/// </summary>
/// <param name="len">不能大于36</param>
/// <returns></returns>
public static string GetGuidRandom(int len)
{
string strSep = ",";
string strChar = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,-";
string intChar = "0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6";
char[] chrSep = strSep.ToCharArray();
char[] intSep = strSep.ToCharArray();
string[] aryChar = strChar.Split(chrSep, strChar.Length);
string[] aryInt = intChar.Split(intSep, intChar.Length);
string guid = System.Guid.NewGuid().ToString();
for(int i =0;i<aryChar.Length;i++)
{
guid=guid.Replace(aryChar[i],aryInt[i]);
}
return guid.Substring(0,len);
}
Random r=new Random();
List <int> list=new List <int>();
for(int i=0;i <=7;i++)
list.Add(r.Next(1,50));
第二種是將將0~9按順序排,然后洗牌,最后取前面七位就可以了。第一種方法: public static string CreatePassword()
{
string fullPassword = "0123456789";
int[] tempr = { -1, -1, -1, -1, -1, -1, -1, -1 };//糾正取不到0...
string retPassword = ""; DateTime d = DateTime.Now;
Random rnd = new Random(d.Millisecond); for (int i = 0; i < 8; i++)
{
int r = rnd.Next(0, fullPassword.Length);//糾正取不到Z
for (int k = 0; k < tempr.Length; k++)
{
if (tempr[k] == r)
{
r = rnd.Next(0, fullPassword.Length);//糾正取不到Z
k = -1;//糾正第一個字符竟然可以重復1次的BUG
}
}
tempr[i] = r;
} for (int i = 0; i < 8 i++)
{
retPassword = retPassword + fullPassword.Substring(tempr[i], 1);
}
return retPassword;
}
第二種方法:
private string RandomList()
{
string str = "";
Random rand = new Random();
int[] a = new int[10];
for (int i = 0; i <= 9; i++)
{
a[i] = i;
} for (int i = 9; i >= 1; i--)
{
swap(ref a[i], ref a[rand.Next(1, 100) % i]);
} for (int m = 0; m < 10; m++)
{
str += a[m];
str += ",";
}
return str;
} private void swap(ref int a,ref int b)
{
int temp = a;
a = b;
b = temp;
}
<script type="text/javascript">
<!--
function RndNum(n)
{
var rnd="";
for(var i=0;i<n;i++)
rnd+=Math.floor(Math.random()*10);
return rnd;
}
var now=new Date();
var bl=false;
var arr =new Array();
for (var j=0;j<1000;j++)
{
var v =RndNum(4);
arr.push(v);
for(var z = 0;z <arr.length-1;z++)
{
if(v == arr[z])
{
document.writeln(v+"---重复<br/>");
bl=true;
break;
}
}
if(!bl)
{
document.writeln(arr[j]+"<br/>");
}
bl=false;
}
var newnow=new Date();
N=newnow-now
alert("所用时间为:"+N+"毫秒") //-->
</script>经测试,当生成的数量>生成位数的阶乘时,就会出现重复。例如RndNum(10),当for (var j=0;j<1000;j++)中J的值超过10*9*8*7*6*5*4*3*2*1时,就会重复。
程序中赋值:Guid id = Guid.NewGuid();
这样子就不会产生重复的
7位的话数据多了看你怎么办