如何在c#中生成优惠券代码?我需要生成一个优惠券代码[5到10位数字],仅供一次性使用。生成和检查是否使用的最佳方法是什么?编辑:我更喜欢字母数字字符-像亚马逊这样的礼券代码必须是唯一的。生成优惠券代码时-您应该考虑具有可预测的序列是否真的是您想要的。例如,凭证代码:ABC101、ABC102、ABC103等是相当可预测的。用户可以轻松猜出优惠券代码。为了防止这种情况-你需要一些方法来防止随机猜测起作用。两种方法:这是一个使用大键空间方法的示例应用程序:staticRandomrandom=newRandom();staticvoidMain(string[]args){intvouchersToGenerate=10;intlengthOfVoucher=10;列出generatedVouchers=newList();char[]keys="ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890".ToCharArray();Console.WriteLine("代金券:");while(generatedVouchers.Countkeys[random.Next(0,keys.Length-1)])//生成一个新的随机字符.Aggregate("",(e,c)=>e+c);//joinintoastring}基于WillHughes和Shekhar_Pro的回答(只是因为我发现这个问题很有趣)这里是另一个实现,但我对您的凭证代码长度要求有点宽松。使用base32编码器,我发现您可以使用Tick值生成字母数字字符串。将滴答计数编码为基数32会生成一个13字符的字符串,可以对其进行格式化以使其更具可读性。publicvoidGenerateCodes(){随机random=newRandom();DateTimetimeValue=DateTime.MinValue;//创建10个代码只是为了查看随机生成。for(inti=0;i<10;++i){intrand=random.Next(3600)+1;//加一以避免0结果。timeValue=timeValue.AddMinutes(rand);byte[]b=System.BitConverter.GetBytes(timeValue.Ticks);stringvoucherCode=Transcoder.Base32Encode(b);Console.WriteLine(string.Format("{0}-{1}-{2}",voucherCode.Substring(0,4),voucherCode.Substring(4,4),voucherCode.Substring(8,5)));这是输出AARI-3RCP-AAAAAACOM-AAZF-AIAAAABIH-LV7W-AIAAAADPL-26FL-AMAAAABBL-W6LV-AQAAAADTP-HFIR-AYAAAACDG-JH5K-A4AAAADDE-GTST-BEAAAAAWL-3ZNN-BIAAAAAGK-4G3Y-BQAAA如果你为Random对象使用一个已知的种子,并且记住你已经创建了多少个,你就可以继续生成代码;例如,如果您需要更多代码并希望确保不生成重复项。这是一种方法:生成一堆介于10000和9999999999之间的唯一数字,并将其放入数据库中。每次给用户一个用户时,将其标记为已使用(如果您想节省空间,则将其删除)。编辑:在开头生成唯一的字母数字值。您可能需要将它们保留在身边以进行验证(正如其他人指出的那样)。如果您的应用程序仅限于使用数字,那么我认为时间戳(DateTime.Now.Ticks)是每次都获取唯一代码的好方法。您可以使用随机数,但这会产生检查每个已发出的数字的开销。如果您也可以使用字母表,那么一定要使用GUID。为了检查它是否被使用过,你需要维护一个数据库并查询它来检查它的有效性。如果您更喜欢字母数字,可以使用Guid.NewGuid()方法:Guidg=Guid.NewGuid();随机rn=newRandom();字符串gs=g.ToString();intrandomInt=rn.Next(5,10+1);Console.WriteLine(gs.Substring(gs.Length-randomInt-1,randomInt));检查它是否未用于存储以前生成的代码的某个地方并进行比较。privatevoidAutoPurchaseVouNo1(){try{intNum=0;con.Close();con.Open();stringincre="SELECTMAX(VoucherNoint+1)FROMtbl_PurchaseAllCompany";SqlCommand命令=newSqlCommand(incre,con);如果(Convert.IsDBNull(command.ExecuteScalar())){Num=100;txtVoucherNoInt1.Text=Convert.ToString(Num);txtVoucherNo1.Text=Convert.ToString("ABC"+Num);}else{Num=(int)(command.ExecuteScalar());txtVoucherNoInt1.Text=Convert.ToString(Num);txtVoucherNo1.Text=Convert.ToString("ABC"+Num);}con.Close();}catch(Exceptionex){MessageBox.Show("Error:"+ex,"Error!!",MessageBoxButtons.OK,MessageBoxIcon.Error);}}尝试使用这种方法创建完整的证书编号,如ABC100,ABC101,ABC102等。试试这段代码以上是C#学习教程:Howtogeneratecouponcodeinc#?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——varchars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";varstringChars=newchar[15];for(inti=0;i本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,转载请注明出处:
