随机生成11位激活码

小Z最近在做商城模块,其中有Coupon代金券支付的功能,这里面涉及到激活码生成的问题,现在约定的是随机产生数字的11位激活码,因为用户在手机上输入数字英文混合的激活码是非常不方便的一件事情(有种方法是new Guid(),然后replace掉“-”),小Z设想是产生10万的随机激活码不重复,代码如下:

<span style="white-space:pre">	</span>/// <summary>
        /// 随机生成11位激活码
        /// </summary>
        /// <param name="offset">偏移毫秒数</param>
        /// <returns>激活码</returns>
        private string createActivationCode(int offset)
        {
            //根据当前时间戳生成random seed
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            //减去10万毫秒内置偏移秒数,再加偏移毫秒数
            int seed = Convert.ToInt32(ts.TotalSeconds) - 100000 + offset;
            Random r = new Random(seed);

            long newActivationCode = 0;
            for (int i = 0; i < 11; i++)
            {
                int randomNum = r.Next(0, 9);
                newActivationCode = newActivationCode * 10 + randomNum;
            }

            var result = newActivationCode.ToString();
            if (result.Length < 11)
            {
                for (int i = result.Length; i < 11; i++)
                {
                    result = "0" + result;
                }
            }

            return result;
        }

当然函数的有效性还需要进一步验证,这里是希望通过时间去产生随机因子(同一毫秒内随机因子相同,目前看生成的随机数也是相同的,不满足需求),这样减去一个偏移量(小于10万),这样我想至少一次生成1000个激活码应该是不会重复,且满足需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值