类别:程序开发

日期:2020-08-21 浏览:2479 评论:0

第一种:根据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");
            }
        }
    }

第二种:根据时间戳生成唯一订单号。

private string CreateId()
{
    TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
    return Convert.ToInt64(ts.TotalSeconds).ToString();
}


第三种:根据生成数字唯一编码。

private long CreateId()
{            
    byte[] buffer = Guid.NewGuid().ToByteArray();            
    return BitConverter.ToInt64(buffer, 0);
}


本文标题:C# 生成唯一订单号
本文链接:https://vtzw.com/post/249.html
作者授权:除特别说明外,本文由 零一 原创编译并授权 零一的世界 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
 您阅读本篇文章共花了: 

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。

最新留言