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());
[解决办法]
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); }
[解决办法]
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下测试通过,没问题的话,别忘了加分,本人分数不多,呵呵
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; }