asp.net生成四位数的随机数,并且保证48小时内不会重复
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net生成四位数的随机数,并且保证48小时内不会重复相关的知识,希望对你有一定的参考价值。
asp.net生成四位数的随机数,并且保证48小时内不会重复
(很急,很急,谢谢各位了)
不能用guid,必须是四位数的随机数
将所有四位数字生成并存放到ArrayList或者类似的数组中
然后每次随机取其中一个 并在得到后从数组中删除该数字
ArrayList al = new ArrayList();
for(;;)
....(初始化数组并向数组添所有四位数字)
下面是得到数字
int i = random.Next(0,al.Count-1);
string str = al[i].ToString();
al.RemoveAt(i);
然后每隔48小时重置数组 计时方式很多 可以用线程 或者其它办法
这样很快并切绝对不会重复 但因为是存放在数组里 所以如果程序退出 数组就重置了 估计LZ是想做网站的验证码吧 那这个方法就可以 如果程序会有中途退出 那可以使用下面的方法 或将数组中的数据存放在数据表里 然后每次对表进行操作
方法2:
拿一张表来存储生成的四位随机数
生成四位随机自然数的办法: int i = random.Next(1000,9999)
生成四位任意编号的办法: string str = random.Next(0,9)
+""+random.Next(0,9)+""+random.Next(0,9)+""+random.Next(0,9)
然后把这个生成的随机数存放到表里
以后每次生成新数之后
select 四位随机数 from 表 where 四位随机数 = 新数
如果表中已经存在这个数 则重新随机 然后再比对
然后每隔48小时清空该表 同上 计时方式很多 可以用线程 或者其它办法
在此不多介绍了
这个办法比较耗时 但可以保证就算程序死掉也不会有重复数据 不过要保证是写在线程里 因为当已生成的数字过多 会需要很长时间才找到不同的四位数字 参考技术A 四位数字最多也就9999个,超过就要重复。48小时不重复很难,用GUID吧,保证不重复。 参考技术B 写个函数解决下:
private string RandomNumber(int n)
string strchar = "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,v,w,x,y,z,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[] Vstr = strchar.Split(',');
string Vnum = "";
int temp = -1;
Random rand = new Random();
for (int i = 1; i < n+1; i++)
if (temp!=-1)
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
int t = rand.Next(61);
if (temp !=-1&&temp==t)
return RandomNumber(n);
temp = t;
Vnum += Vstr[t];
return Vnum;
把lable中属性text设置成8888,在第一次回传的时候调用下:
this.lable1.Text=RandomNumber(4); 参考技术C 可以考虑建张表 (Num,Date)
Random r = new Random();
String temp= Convert.ToString(r.Next(1000,9999));
String date = System.DateTime.Now.ToString()
把temp 和 date作为参数调用方法做比较,查看是否有重复数字,如果有重新生成随机数,直到没有重复为止,然后把这数字和日期存入数据库。 参考技术D 得看你的使用频率了。如果频率高,不一定做得到。 第5个回答 2010-01-06 用什么都很难实现,如果你用的频率很高的话。
GUID又太长了
JAVA 获取一个四位随机数(并且四位数不重复),并说明原理和算法
每次获取一个一位数的随机数存在一个 int[4]的整型数组,如果新获取的随机数在整型数组中已经存在了,就再获取一次(使用while循环)。然后把int[4]的数转换成四位数(这个应该简单吧,使用sum=sum*10+a[i]) 参考技术A import java.util.*;public class Get4Number
public static void main(String[] args)
System.out.println(getNumber());
/** 得到一个0-9的随机数 */
private static int getRandomNumber()
return (int) ((Math.random() * 100) % 10);
/** 得到一个四位无重复数字的数 */
private static int getNumber()
Set<Integer> set = new HashSet<Integer>();
while (true)
int a = getRandomNumber();
set.add(new Integer(a));//Set里面的元素是不重复的,如果重复是存不进去的。
if(set.size()>3)
break;
int index = (int) ((Math.random() * 100) % 4);
if(index==0)index+=1;
Integer[] arr = new Integer[set.size()];
set.toArray(arr);
String s = "";
if(arr[0].intValue()==0)//如果第一位是0,则随机和后面三位交换
Integer temp = arr[0];
arr[0] = arr[index];
arr[index] = temp;
for(int i=0;i<arr.length;i++)
s += arr[i].intValue();
return Integer.parseInt(s);
参考技术B public class fournum
public static void main(String[] args)
int[] num = new int[4];
for (int i = 0; i < 4; i++)
num[i] = (int)Math.floor(Math.random()*10);
for(int j=0;j<i;j++)
while(num[i]==num[j])
num[i] = (int)Math.floor(Math.random()*10);
int answer = num[0]*1000+num[1]*100+num[2]*10+num[3];
System.out.println(answer);
System.out.println((int)Math.floor(Math.random()*10));
public fournum()
// TODO Auto-generated constructor stub
可以直接运行
取4次,每取一次,放入list
每次放入做判定,list里是否已经有此数,如果已存在继续取。
4个string相加 然后 你可以parse成你想要的格式。 参考技术D random类 可以先生成 在判断有重复就重新生成
以上是关于asp.net生成四位数的随机数,并且保证48小时内不会重复的主要内容,如果未能解决你的问题,请参考以下文章