• 几家性价比超高的烤肉店 赶紧去试试 2019-09-20
  • 支付宝微信等即使收归央行也难管无限复制派生还派生多个马云腾 2019-09-20
  • 回复@老老保老张工:麻烦去问一下度娘再来瞎扯…… 2019-09-10
  • 中国的长处是集中力量办大事 就是攻坚 但会顾此失彼 2019-09-04
  • 安徽省高校公共体艺教育推行俱乐部制 2019-09-04
  • 巢湖市第三届少儿器乐比赛圆满落幕 2019-09-01
  • В Пекине закрылась первая сессия ВСНП 13-го созыва 2019-09-01
  • [微笑]那就是管理问题了,跟免不免费本身不相干! 2019-08-24
  • [微笑]因为人的基本需求是存在边际的,不会出现你所谓的无限制消费!比如坐公交,你会因为不要钱就一天到晚呆在公汽上么? 2019-08-19
  • 监督效率高了 办案成本低了 2019-08-19
  • “见新见绿”模型初现 悠然阳城未来可期 2019-07-28
  • 贵州1121名党员领导干部因管党治党不力被问责  2019-07-12
  • 小黄车霸王条款藏这儿:扫到故障车照收费 法院管不了 2019-06-22
  • 恒大集团有限公司获第十二届人民企业社会责任奖年度扶贫奖 2019-06-22
  • 海印公园北片物业及配套停车场出租项目 2019-06-20
  • 厦门兴锐达自动化设备有限公司陈敏

    多特蒙特门兴:厦门兴锐达自动化设备有限公司陈敏

    最新动态新闻

    让你轻松掌握天铭网络的第一手信息

    烟台网站制作技术问答

    c#生成不重复订单号(16位),不需要确认数据库,商城网站建设中常用

    2017/06/27

    先贴代码吧:

    ?public class OrderForm

    ??? {

    ??????? *****

    ??????? private static long np1 = 0,np2 = 0,np3 = 1;?//临时计算用。

    ??????? private static object orderFormNumberLock = new object();//线程并行锁,以保证同一时间点只有一个用户能够操作流水号。如果分多个流水号段,放多个锁,并行压力可以更好的解决,大家自己想法子扩充吧

    ??????? private string?strOrderNumber = null;//订单号。

    ??????? ****

    ????????其它操作、属性,此处内容省略。

    ??????? ****

    ??????? ///

    ??????? /// 初始化订单号码

    ??????? /// 编码规则:(16进制,从DateTime.MinValue起到此时的)总天数 ? 今天的总秒数 ? 当前秒内产生的订单序号,其中今天的订单每秒清零。

    ??????? /// 该方法线程安全。

    ??????? ///

    ??????? public void InitializeOrderNumber()

    ??????? {

    ??????????? DateTime now = DateTime.Now;

    ??????????? TimeSpan span = now - DateTime.MinValue;

    ??????????? long tmpDays = span.Days;

    ??????????? long seconds = span.Hours * 3600 ? span.Seconds;

    ??????????? StringBuilder sb = new StringBuilder();

    ??????????? Monitor.Enter(orderFormNumberLock);?//锁定资源

    ??????????? if(tmpDays != np1){

    ??????????????? np1 = tmpDays;

    ??????????????? np2 = 0;

    ??????????????? np3 = 1;

    ??????????? }

    ??????????? if (np2 != seconds)

    ??????????? {

    ??????????????? np2 = seconds;

    ??????????????? np3 = 1;

    ??????????? }

    ??????????? sb.Append(Convert.ToString(np1, 16).PadLeft(5, '0') ? Convert.ToString(np2, 16).PadLeft(5, '0') ? Convert.ToString(np3 ?, 16).PadLeft(6, '0'));

    ??????????? Monitor.Exit(orderFormNumberLock);?//释放资源

    ????????????strOrderNumber = sb.ToString();

    ??????? }

    ??????? ///

    ??????? /// 获取订单号表示的日期

    ??????? /// 即:反向获取订单号的日期

    ??????? ///

    ??????? public DateTime DateTimeFromOrderNumber

    ??????? {

    ??????????? get

    ??????????? {

    ??????????????? if (!string.IsNullOrEmpty(OrderNumber))

    ??????????????? {

    ??????????????????? return DateTime.MinValue.AddDays(Convert.ToInt64(OrderNumber.Substring(0,5), 16)).AddSeconds(Convert.ToInt64("0x" ? OrderNumber.Substring(5, 5), 16));

    ??????????????? }

    ??????????????? else

    ??????????????? {

    ??????????????????? return DateTime.MinValue;

    ??????????????? }

    ??????????? }

    ??????? }

    }

    ?

    思路:

    1.实现:采用时间信息来标识订单是一个好的想法。但在微观尺度上,时间的秒与毫秒就会显的尺度很大,程序很容易在1秒内生成多个订单号,因此还需要添加一个流水号,流水号有多大容量,程序就可以在1秒内生成多少个订单号。

    2.要求:订单号应当尽量简短。时间的字符串加起来也不短,如:2015-06-24??11: 12:55,去掉非字符是(4 2 2 2*3)总共14个字符,如果将时间改为16进制存储,则可以省略到10个字符以内。其它6位可以让给流水号使用。

    3.结果:

    订单号可以追溯到用户下单的秒级别时间;

    订单号流水在秒级别内可以达到0xFFFFFF的空量,即:16777215个订单,即每秒中理论可以达到1600万个以上的订单号,而且不重复。

    订单号可以排序:如果存储字符,可以按字符排序,同一个时间段的订单会在一起。如果把订单号转换成数字存储则可以精确排序。

    当前时间中的日期,按从0001-01-01起到现在的天数,采用16进制存储,比如今天是2015-06-24,换算成天数:2015*365 6*30 24=735679天,换算成16进制:B39BF,仅占5个字符。而5个字符的空量(0xFFFFF的空量)是1048575天,换算成年:2872年。现在是2015年,可以用到850年以后,放心了吧!如果从2000年算起,仅2个字符就行,占用容量更小,其它3个字符位置可以更多的给订单流水号使用或附加其它信息。

    当前天中的秒数同理,只是从今天0时开始计算,也是5个字符,不再辍述。


    0
    分享到:
  • 几家性价比超高的烤肉店 赶紧去试试 2019-09-20
  • 支付宝微信等即使收归央行也难管无限复制派生还派生多个马云腾 2019-09-20
  • 回复@老老保老张工:麻烦去问一下度娘再来瞎扯…… 2019-09-10
  • 中国的长处是集中力量办大事 就是攻坚 但会顾此失彼 2019-09-04
  • 安徽省高校公共体艺教育推行俱乐部制 2019-09-04
  • 巢湖市第三届少儿器乐比赛圆满落幕 2019-09-01
  • В Пекине закрылась первая сессия ВСНП 13-го созыва 2019-09-01
  • [微笑]那就是管理问题了,跟免不免费本身不相干! 2019-08-24
  • [微笑]因为人的基本需求是存在边际的,不会出现你所谓的无限制消费!比如坐公交,你会因为不要钱就一天到晚呆在公汽上么? 2019-08-19
  • 监督效率高了 办案成本低了 2019-08-19
  • “见新见绿”模型初现 悠然阳城未来可期 2019-07-28
  • 贵州1121名党员领导干部因管党治党不力被问责  2019-07-12
  • 小黄车霸王条款藏这儿:扫到故障车照收费 法院管不了 2019-06-22
  • 恒大集团有限公司获第十二届人民企业社会责任奖年度扶贫奖 2019-06-22
  • 海印公园北片物业及配套停车场出租项目 2019-06-20
  • 重庆时时彩五星3码必中 超准单双 北京时时高频票 斗牛看四张牌抢庄辅助 大亨飞艇计划下载 ak彩票平台 时时软件 重庆时时彩怎么杀号好 山东时时开奖号码走势图表大全 澳门二十一点玩法图解 助赢北京pk10app 派彩网app psv有什么好玩的游戏 lG赛车计划 秒速时时走势分析图 龙虎赌博的规律技巧