asp.net生成四位数的随机数,并且保证48小时内不会重复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net生成四位数的随机数,并且保证48小时内不会重复相关的知识,希望对你有一定的参考价值。

asp.net生成四位数的随机数,并且保证48小时内不会重复

(很急,很急,谢谢各位了)
不能用guid,必须是四位数的随机数

方法1:
将所有四位数字生成并存放到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


可以直接运行

参考技术C 想法: random(0,10).
取4次,每取一次,放入list
每次放入做判定,list里是否已经有此数,如果已存在继续取。

4个string相加 然后 你可以parse成你想要的格式。
参考技术D random类 可以先生成 在判断有重复就重新生成

以上是关于asp.net生成四位数的随机数,并且保证48小时内不会重复的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 获取一个四位随机数(并且四位数不重复),并说明原理和算法

如何根据条件禁用列表项 - ASP.NET C#

excel随机生成50个四位数字母

生成一个四位数的随机验证码

JAVA中怎么随机产生一个不重复的四位数

PHP随即生成6位数三位0-9三位a-z