明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
随笔 - 1277, 文章 - 0, 评论 - 214, 阅读 - 320万
  博客园  :: 首页  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

C#:优惠券代码

Posted on   且行且思  阅读(2074)  评论(1编辑  收藏  举报
复制代码
 static Random random = new Random();
        List<string> generatedVouchers = new List<string>();
        char[] keys = "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890".ToCharArray(); 
  

        private static string GenerateVoucher(char[] keys, int lengthOfVoucher)
        {
         return Enumerable
        .Range(1, lengthOfVoucher) // for(i.. ) 
        .Select(k => keys[random.Next(0, keys.Length - 1)]) // generate a new random char 
        .Aggregate("", (e, c) => e + c); // join into a string
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                int vouchersToGenerate = 12;
                int lengthOfVoucher = 12;

                List<string> generatedVouchers = new List<string>();
                char[] keys = "1234567890".ToCharArray();


                //while (generatedVouchers.Count < vouchersToGenerate)
                //{
                //    var voucher = GenerateVoucher(keys, lengthOfVoucher);
                //    if (!generatedVouchers.Contains(voucher))
                //    {
                //        generatedVouchers.Add(voucher);
                //        Response.Write(string.Format("<br>[#{0}] {1}", generatedVouchers.Count, voucher));
                //    }
                //}

                string vCode = GenerateVoucher(keys, lengthOfVoucher);
                Response.Write("<br>" + string.Format("{0}-{1}-{2}",
                         vCode.Substring(0, 4),
                         vCode.Substring(4, 4),
                         vCode.Substring(8, 4)));

                //Response.Write("<br>" + string.Format("{0}", vCode.Substring(0, 4)));
                //Response.Write("<br>" + string.Format("{0}", vCode.Substring(4, 4)));
                //Response.Write("<br>" + string.Format("{0}", vCode.Substring(8, 4)));

                Response.Write("<br>-------------------------------------------------------------------<br>");

                //**********************************************************************************************
                Random random = new Random();
                DateTime timeValue = DateTime.MinValue;
                System.Text.Encoding big5 = System.Text.Encoding.GetEncoding("big5");
                System.Text.Encoding gb2312 = System.Text.Encoding.GetEncoding("gb2312");

                // Create 10 codes just to see the random generation.
                for (int i = 0; i < 10; ++i)
                {
                    int rand = random.Next(3600);
                    timeValue = timeValue.AddMinutes(rand);
                    byte[] buffer = System.BitConverter.GetBytes(timeValue.Ticks);
                    string voucherCode = ToBase32String(buffer); //BitConverter.ToString(buffer); 
                    Response.Write("<br>" + string.Format("{0}-{1}-{2}",
                         voucherCode.Substring(0, 4),
                         voucherCode.Substring(4, 4),
                         voucherCode.Substring(8, 5)));
                }
                Response.Write("<br>-------------------------------------------------------------------<br>");

                //**********************************************************************************************

                //System.Guid g = System.Guid.NewGuid();
                //Random rn = new Random();
                //string gs = g.ToString();
                //int randomInt = rn.Next(5, 10 + 1);
                //Response.Write("<br>" + gs.Substring(gs.Length - randomInt - 1, randomInt));
            }
        }

        public static string ToBase32String(byte[] input)
        {
            if (input == null || input.Length == 0)
            {
                throw new ArgumentNullException("input");
            }

            int charCount = (int)Math.Ceiling(input.Length / 5d) * 8;
            char[] returnArray = new char[charCount];

            byte nextChar = 0, bitsRemaining = 5;
            int arrayIndex = 0;

            foreach (byte b in input)
            {
                nextChar = (byte)(nextChar | (b >> (8 - bitsRemaining)));
                returnArray[arrayIndex++] = ValueToChar(nextChar);

                if (bitsRemaining < 4)
                {
                    nextChar = (byte)((b >> (3 - bitsRemaining)) & 31);
                    returnArray[arrayIndex++] = ValueToChar(nextChar);
                    bitsRemaining += 5;
                }

                bitsRemaining -= 3;
                nextChar = (byte)((b << bitsRemaining) & 31);
            }

            //if we didn't end with a full char
            if (arrayIndex != charCount)
            {
                returnArray[arrayIndex++] = ValueToChar(nextChar);
                while (arrayIndex != charCount) returnArray[arrayIndex++] = '='; //padding
            }

            return new string(returnArray);
        }
        private static int CharToValue(char c)
        {
            int value = (int)c;

            //65-90 == uppercase letters
            if (value < 91 && value > 64)
            {
                return value - 65;
            }
            //50-55 == numbers 2-7
            if (value < 56 && value > 49)
            {
                return value - 24;
            }
            //97-122 == lowercase letters
            if (value < 123 && value > 96)
            {
                return value - 97;
            }

            throw new ArgumentException("Character is not a Base32 character.", "c");
        }
        private static char ValueToChar(byte b)
        {
            if (b < 26)
            {
                return (char)(b + 65);
            }

            if (b < 32)
            {
                return (char)(b + 24);
            }

            throw new ArgumentException("Byte is not a value Base32 value.", "b");
        }
复制代码

 

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示