C#怎么生成唯一订单号

作者:无名 - C#教程 -

本文实例为大家分享了C#生成唯一订单号的具体代码,供大家参考,具体内容如下

根据GUID+DateTime.Now.Ticks生产唯一订单号

/// <summary>
  /// 生成唯一数
  /// </summary>
  public class UniqueData
  {
    private static object obj = new object();
    private static int GuidInt { get { return Guid.NewGuid().GetHashCode(); } }
    private static string GuidIntStr { get { return Math.Abs(GuidInt).ToString(); } }

    /// <summary>
    /// 生成
    /// </summary>
    /// <param name="mark">前缀</param>
    /// <param name="timeType">时间精确类型 1 日,2 时,3 分,4 秒(默认) </param>
    /// <param name="id">id 小于或等于0则随机生成id</param>
    /// <returns></returns>
    public static string Gener(string mark, int timeType = 4, int id = 0)
    {
      lock (obj)
      {
        var number = mark;
        var ticks = (DateTime.Now.Ticks - GuidInt).ToString();
        int fillCount = 0;//填充位数

        number += GetTimeStr(timeType, out fillCount);
        if (id > 0)
        {
          number += ticks.Substring(ticks.Length - (fillCount + 3)) + id.ToString().PadLeft(10, '0');
        }
        else
        {
          number += ticks.Substring(ticks.Length - (fillCount + 3)) + GuidIntStr.PadLeft(10, '0');
        }
        return number;
      }
    }

    /// <summary>
    /// 生成
    /// </summary>
    /// <param name="mark">前缀</param>
    /// <param name="timeType">时间精确类型 1 日,2 时,3 分,4 秒(默认)</param>
    /// <param name="id">id 小于或等于0则随机生成id</param>
    /// <returns></returns>
    public static string GenerLong(string mark, int timeType = 4, long id = 0)
    {
      lock (obj)
      {
        var number = mark;
        var ticks = (DateTime.Now.Ticks - GuidInt).ToString();
        int fillCount = 0;//填充位数

        number += GetTimeStr(timeType, out fillCount);
        if (id > 0)
        {
          number += ticks.Substring(ticks.Length - fillCount) + id.ToString().PadLeft(19, '0');
        }
        else
        {
          number += GuidIntStr.PadLeft(10, '0') + ticks.Substring(ticks.Length - (9 + fillCount));
        }
        return number;
      }
    }

    /// <summary>
    /// 获取时间字符串
    /// </summary>
    /// <param name="timeType">时间精确类型 1 日,2 时,3 分,4 秒(默认)</param>
    /// <param name="fillCount">填充位数</param>
    /// <returns></returns>
    private static string GetTimeStr(int timeType, out int fillCount)
    {
      var time = DateTime.Now;
      if (timeType == 1)
      {
        fillCount = 6;
        return time.ToString("yyyyMMdd");
      }
      else if (timeType == 2)
      {
        fillCount = 4;
        return time.ToString("yyyyMMddHH");
      }
      else if (timeType == 3)
      {
        fillCount = 2;
        return time.ToString("yyyyMMddHHmm");
      }
      else
      {
        fillCount = 0;
        return time.ToString("yyyyMMddHHmmss");
      }
    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

IT人知识库 该篇知识地址:http://www.itpeo.net/12809/520429.html





rfedfre

C# 添加PDF页眉/页脚的示例代码

概述 页眉页脚是一篇完整、精致的文档的重要组成部分。在页眉页脚处,可以呈现的内容很多,如公司名称、页码、工作表名、日期... ...

微信小程序支付C#后端源码

本文实例为大家分享了微信小程序支付C#后端源码,供大家参考,具体内容如下 using System; using S... ...

rfedfre

C#利用VS中插件打包并发布winfrom程序

本文为大家分享了C#利用VS中插件打包并发布winfrom程序,供大家参考,具体内容如下 1.先在VS 的扩展更新中搜索... ...

C#实现金额转换成中文大写金额

本文实例为大家分享了C#金额转换成中文大写金额的具体代码,供大家参考,具体内容如下 /// <summary&... ...

rfedfre

C# WPF 父控件通过使用可视化树找到子控件的示例代码

在我们使用WPF设计前台界面时,经常会重写数据模板,或者把控件放到数据模板里。但是一旦将控件放到数据模板中,在后台就没有... ...

C#实现ini文件读写操作

本文实例为大家分享了C#语言实现ini文件读写操作的具体代码,供大家参考,具体内容如下 1、ini文件是什么? 见百度百... ...

rfedfre

C# 7.0中解构功能详解

本文为大家分享了C# 7.0中的解构功能,供大家参考,具体内容如下 解构元组   C#7.0新增了诸多功能,其中有一项是... ...

C#获取日期的星期名称实例代码

具体代码如下所示: private string GetWeekName(DayOfWeek week) {... ...

rfedfre

C#中字段、属性、只读、构造函数赋值、反射赋值的问题

C#中字段、属性和构造函数赋值的问题提出问题如下所述: 首先提出几个问题: 1、如何实现自己的注入框架? 2、字段和自动... ...

WPF实现控件拖动的示例代码

实现控件拖动的基本原理是对鼠标位置的捕获,同时根据鼠标按键的按下、释放确定控件移动的幅度和时机。 简单示例: 在... ...

C# 中用 Sqlparameter 的两种用法

新建一个表: create table abc ( id int IDENTITY(1,1) NOT NULL, n... ...

C#中sqlDataRead 的三种方式遍历读取各个字段数值的方法

数据库的查询分析器中写上如下代码: create table studentname ( id int prim... ...

c# WinForm 窗体之间传值的几种方式(小结)

前言 小编最近维护一个Winfrom窗体,是项目中CS端的主窗体,很多子窗体需要从主窗体获取值,同时子窗体还需要给主窗... ...

rfedfre

C# WPF 通过委托实现多窗口间的传值的方法

在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多... ...

rfedfre

自定义WPF窗体形状的实战记录

介绍 你好WPF爱好者。 随着WPF等统一API语言的发明,丰富用户界面变得非常容易。 创建丰富的用户界面只是一个想法... ...

深入浅析c#静态多态性与动态多态性

C# 多态性 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的... ...

rfedfre

C#程序中类数量对程序启动的影响详解

前言 最近我在项目写了几万行代码,小伙伴担心会让程序启动速度变慢,所以本渣就来做测试。 本渣使用了代码创建器,创建了 1... ...

rfedfre

Unity色子的投掷和点数的获得详析

前言 前几天需要一个色子的投掷并且获得朝上点数的Unity脚本,在网上找了很多,都是一个模子刻出来的。 对于2018版的... ...

rfedfre

C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题

正文  #方法一:使用string.Contains方法   string.Contains是大小写敏感的,如... ...

WPF中窗体最大化问题的解决方法

前言 在创建WPF应用的时候,你第一个看到的就是窗体类。它作为窗体的基础,提供标准的边框、工具条、最大化、最小化和关闭按... ...