自己使用的订单号的生成规则

商城类的系统都需要生成订单号,订单号的生成规则各个都不一样

*自定义的自增编号

*日期(yyyyMMdd)+随机数(n位)

*日期(yyyyMMdd)+userid+随机数(n位)

等等之类的,我做商城时也纠结这个订单号生成规则。所以简单记录下自己的订单号规则:

  • 订单号必须是唯一的
  • 订单号的长度尽量的短
  • 让内部人看到订单号后能获取一定的信息
  • 外部人不能推测下一个订单号或者看出某天的销量
  • 尽量都用数字

我的订单号类似:01101801136675,规则是:

01:代表订单的来源标示(就2位)
10:代表特殊的主体代号
180113:代表18年1月13号的订单
6675:代号自增数(这个是redis中自增的数,然后把这个数用Base10Code转换,其中CharList自己定义字符的顺序)

public class Base10Code
    {
        
        
        private const string CharList = "0987456312";
      
        public static String Encode(long input)
        {
            if (input < 0) throw new ArgumentOutOfRangeException("input", input, "input cannot be negative");
            input += 10 * 10 * 10;
            char[] clistarr = CharList.ToCharArray();
            var result = new Stack<char>();
            while (input != 0)
            {
                result.Push(clistarr[input % 10]);
                input /= 10;
            }
            return new string(result.ToArray());
        }

        
        public static Int64 Decode(string input)
        {
            var reversed = input.ToUpper().Reverse();
            long result = 0;
            int pos = 0;
            foreach (char c in reversed)
            {
                result += CharList.IndexOf(c) * (long)Math.Pow(10, pos);
                pos++;
            }
            result -= 10 * 10 * 10;
            return result;
        }


    }

 

 

 

 

 

转载于:https://my.oschina.net/emisky/blog/1606510

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值