• GenerateId类:生成唯一id、订单号


    using System;
    using System.Security.Cryptography;

    namespace Infrastructure
    {
    public class GenerateId
    {
    public static string GetGuidHash()
    {
    return Guid.NewGuid().ToString().GetHashCode().ToString("x");
    }

    /// <summary>
    /// 生成一个长整型,可以转成19字节长的字符串
    /// </summary>
    /// <returns>System.Int64.</returns>
    public static long GenerateLong()
    {
    byte[] buffer = Guid.NewGuid().ToByteArray();
    return BitConverter.ToInt64(buffer, 0);
    }

    /// <summary>
    /// 生成16个字节长度的数据与英文组合串
    /// </summary>
    public static string GenerateStr()
    {
    long i = 1;

    foreach (byte b in Guid.NewGuid().ToByteArray())
    {
    i *= ((int)b + 1);
    }

    return String.Format("{0:x}", i - DateTime.Now.Ticks);
    }

    /// <summary>
    /// 创建11位的英文与数字组合
    /// </summary>
    /// <returns>System.String.</returns>
    public static string ShortStr()
    {
    return Convert(GenerateLong());
    }

    /// <summary>
    /// 唯一订单号生成
    /// </summary>
    /// <returns></returns>
    public static string GenerateOrderNumber()
    {
    string strDateTimeNumber = DateTime.Now.ToString("yyyyMMddHHmmssffff");
    string strRandomResult = NextRandom(1000, 1).ToString("0000");

    return strDateTimeNumber + strRandomResult;
    }

    #region private

    /// <summary>
    /// 参考:msdn上的RNGCryptoServiceProvider例子
    /// </summary>
    /// <param name="numSeeds"></param>
    /// <param name="length"></param>
    /// <returns></returns>
    private static int NextRandom(int numSeeds, int length)
    {
    // Create a byte array to hold the random value.
    byte[] randomNumber = new byte[length];
    // Create a new instance of the RNGCryptoServiceProvider.
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    // Fill the array with a random value.
    rng.GetBytes(randomNumber);
    // Convert the byte to an uint value to make the modulus operation easier.
    uint randomResult = 0x0;
    for (int i = 0; i < length; i++)
    {
    randomResult |= ((uint) randomNumber[i] << ((length - 1 - i)*8));
    }

    return (int) (randomResult%numSeeds) + 1;
    }

    static string Seq = "s9LFkgy5RovixI1aOf8UhdY3r4DMplQZJXPqebE0WSjBn7wVzmN2Gc6THCAKut";

    /// <summary>
    /// 10进制转换为62进制
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>

    private static string Convert(long id)
    {
    if (id < 62)
    {
    return Seq[(int) id].ToString();
    }
    int y = (int) (id%62);
    long x = (long) (id/62);

    return Convert(x) + Seq[y];
    }

    #endregion



    }
    }

  • 相关阅读:
    外设驱动库开发笔记42:DAC8552 DAC驱动
    网络爬虫例子
    http 426 Upgrade Required
    springframework的Assert功能举例
    springframework的ReflectionUtils反射工具类功能举例
    Spring的RestTemplate功能举例
    cocos 3 如何发送全局自定义事件
    cocos 制作滚动按钮 聊天框的方式
    coocs 中的scrollView控件
    graalvm 编译原生java 解决反射的问题 maven配置
  • 原文地址:https://www.cnblogs.com/zhang-wenbin/p/10998286.html
Copyright © 2020-2023  润新知