读书人

C#生成流水码:从0到9中随机生成8位数

发布时间: 2012-03-25 20:55:16 作者: rapoo

C#生成流水码:从0到9中随机生成8位数字,同批次的流水码不重复。
每次随机8位的数字,具体生成多少个,由输入数量决定。忘各位大侠教教小弟,C#怎么实现。
特别注明:要求每次生成的流水码必须是不一致的!!!

下面这段代码的这种调用系统时间作为随机种子的做法,虽然可以生成随机数,但是会有少部分重复数据,我要的是每批生成的数据100%无重复。。。。望各位大虾和大侠多多指教,有话就说,谢谢~

附:(会有少部分重复,不可取)

private static char[] constant = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

public static string GenerateRandomNumber(int Length)
{
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(10);
Random rd = new Random();
for (int i = 0; i < Length; i++)
{
newRandom.Append(constant[rd.Next(10)]);
}
return newRandom.ToString();
}



[解决办法]
guid.newguid
Random rand = new Random(Guid.NewGuid().GetHashCode());

[解决办法]

探讨
guid.newguid
Random rand = new Random(Guid.NewGuid().GetHashCode());

[解决办法]
List history = new List();

Random rd = new Random();
int num = rd.Next(100000000); 数字直接生成就可以,0-9,刚好是10进制8位还在int32范围之内
while (history.Contains(num)) num = rd.Next(100000000); //重复就再来一次
history.Add(num);
[解决办法]
一个GUID解决所有问题!!!!
[解决办法]
C# code
Random b = new Random();            int length =10;            int rand=b.Next(100000000);            int[] No = new int[length];//            bool[] a = new bool[100000000];            for (int i = 0; i < length; i++)            {                                if (!a[rand])                {                    No[i] = rand;                                   }                else                {                    i--;                }                rand = b.Next(100000000);            }
[解决办法]
探讨
引用:
guid.newguid
Random rand = new Random(Guid.NewGuid().GetHashCode());


楼上的果然是牛叉,我现在看明白了,但是万一你的这个随机种子Guid.NewGuid().GetHashCode()重复了,咋办呢?

[解决办法]
探讨
引用:
引用:
引用:
guid.newguid
Random rand = new Random(Guid.NewGuid().GetHashCode());


楼上的果然是牛叉,我现在看明白了,但是万一你的这个随机种子Guid.NewGuid().GetHashCode……

[解决办法]
楼主不用太钻牛角尖,概率小到一定程度就可以忽略了
[解决办法]
guid replace("-","").substring
rd.Next(100000000,999999999);
[解决办法]
C# code
            Random b = new Random();            int length =10;            int rand=b.Next(100000000);            int[] No = new int[length];//            bool[] a = new bool[100000000];            for (int i = 0; i < length; i++)            {                                if (!a[rand])                {                    No[i] = rand;                     a[rand]=true; //漏了!                                 }                else                {                    i--;                }                rand = b.Next(100000000);            }
------解决方案--------------------


既然不能重复数据,那就判断是不是已经生成,如果不想判断,就在数据库里作为唯一索引或者主键,不过索引其实挺慢的,但是如果你的数据库非常大,那仅通过c#的集合来保存,效率也是有问题。
[解决办法]
楼上大家所说的基本都是伪随机数,记得在CSDN里面看到一哥们的博客,也忘记地址了,反正对随机数的产生阐述的还是比较透彻。帮顶了
[解决办法]
我的在VS2008下测试通过,没问题的话,别忘了加分,本人分数不多,呵呵

C# code
private static char[] constant = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };        static void Main(string[] args)        {            string[] AllID = new string[100];  //存放所有已经生成的流水号            GenerateRandomNumber(100, AllID);            for (int i = 0; i < AllID.Length; i++)                Console.WriteLine(AllID[i]);            Console.ReadLine();        }        public static void GenerateRandomNumber(int Length,string[] P_AllID)  //Length要的流水号个数,P_AllID存放生成的流水号        {                                   Random rd = new Random();            int Num=0;            do            {                System.Text.StringBuilder newRandom = new System.Text.StringBuilder(8);  //存放一个流水号                for (int i = 0; i < 8; i++)  //8位号码,是其他位数,改此即可                {                    newRandom.Append(constant[rd.Next(10)]);                }                if(!IsExist(newRandom.ToString(),P_AllID,Num))  //如果该号还没生成,就加入数组P_AllID                    P_AllID[Num++] = newRandom.ToString();            } while (!(Num >= Length));                    }        //查找当前生成的流水号是否已经存在        public static bool IsExist(string CurrentID, string[] P_AllID, int CurrentLength) //CurrentLength指:数组P_AllID当前实际元素的个数        {            if (CurrentLength == 0)                return false;            for (int x = 0; x < CurrentLength;x++)                if (CurrentID == P_AllID[x])                {                    return true;                }            return false;        } 

读书人网 >C#

热点推荐