吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4053|回复: 13
收起左侧

[其他转载] 生成随机不重复单号

[复制链接]
迷恋自留地 发表于 2021-7-2 18:09


BillNoHelper.GenerateCouponKey();

    public class BillNoHelper
    {

        /// <summary>
        ///  防止创建类的实例
        /// </summary>
        private BillNoHelper() { }
        private static readonly object locker = new object();
        private static int _sn = 0;
        /// <summary>
        /// 生成单据编号
        /// </summary>
        /// <returns></returns>
        public static string GenerateId()
        {
            lock (locker)   //lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。
            {
                if (_sn == 9999)
                {
                    _sn = 1;
                }
                else
                {
                    _sn++;
                }
                return DateTime.Now.ToString("yyMMddHHmmss") + _sn.ToString().PadLeft(4, '0');
            }
        }
        /// <summary>
        /// 唯一值
        /// </summary>
        /// <returns></returns>
        public static string guid()
        {
            return Guid.NewGuid().ToString().Replace("-", "");
        }
        /// <summary>
        /// GuidExtension
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        public static string IsNum(Guid guid)
        {
            var s = guid.ToString();
            var sb = new StringBuilder();
            for (int i = 0; i < s.Length; i++)
            {
                if (Char.IsNumber(s, i))
                {
                    sb.Append(s.Substring(i, 1));
                }
            }
            return sb.ToString();
        }

        #region 生成 Coupon Key 
        private static readonly object locker2 = new object();
        private static int _sn2 = 0;
        /// <summary>
        /// 生成key 12位  字母+数字 
        /// </summary>
        /// <returns></returns>
        public static string GenerateCouponKey()//
        {
            string s;
            lock (locker2)
            {
                if (_sn2 == 9999999)
                {
                    _sn2 = 1;
                }
                else
                {
                    _sn2++;
                }
                s = $"Qq@,.*745u787#$@,.><;'{DateTime.Now.Ticks}{_sn2}";
            }
            return MD5_16(s);

        }
        private static string MD5_16(string p_str)
        {

            System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] data = System.Text.Encoding.Default.GetBytes(p_str);
            byte[] md5Data = md5.ComputeHash(data);
            string strResult = System.BitConverter.ToString(md5Data, 4, 8);
            md5.Clear();
            strResult = strResult.Replace("-", "").ToUpper();
            return strResult;
        }
        #endregion

    }

免费评分

参与人数 2吾爱币 +6 热心值 +2 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
FENGMUTIAN + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 迷恋自留地 发表于 2021-7-4 22:18
xiaovssha 发表于 2021-7-2 23:37
[mw_shl_code=csharp,true]DateTime.Now.ToString("yyMMddHHmmss") + _sn.ToString().PadLeft(4, '0');[/mw ...

不抬杠,你是对的。只是个方法,理论上不会有一秒一万单,可以考虑雪花id
侃遍天下无二人 发表于 2021-7-2 19:40
nanaqilin 发表于 2021-7-2 20:45
侃遍天下无二人 发表于 2021-7-2 19:40
直接拿UUID当单号不就行了

对,我也有这个想法,UUID本身就不重复的啊
Js_Aaron 发表于 2021-7-2 20:55
UUID 不行吗
Gaoqi12355 发表于 2021-7-2 21:42
怎么使用啊
exnet 发表于 2021-7-2 23:29
有点复杂
xiaovssha 发表于 2021-7-2 23:37
[C#] 纯文本查看 复制代码
DateTime.Now.ToString("yyMMddHHmmss") + _sn.ToString().PadLeft(4, '0');
1秒内有1w以上的单,就重复了鸭
 楼主| 迷恋自留地 发表于 2021-7-4 22:18

单号,可以用作核销之类的
 楼主| 迷恋自留地 发表于 2021-7-4 22:21

静态方法,创建类,将代码复制过去,直接调用就好了BillNoHelper.GenerateCouponKey();
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表