• Eric 的随机文件名 生成方法


    利用 当前时间与2000-1-1 0:0:0 相差的毫秒数转成36进制字符串 加上4位随机字符串 生成一个随机文件名. 算是长度比较短而唯一性比较高的随机文件名生成方法了.

    实测1,000,000 * 100次, 平均每生成1,000,000个随机文件名耗时0.3秒. (测试平台:Dell 640M, T2300, XPSP2)

    private static string charDictionary = "0123456789abcdefghijklmnopqrstuvwxyz";

    #region GetRandomString
    public static string GetRandomString(int length)
    {
        
    return GetRandomString(new Random(), length);
    }

    public static string GetRandomString(string dictionary, int length)
    {
        
    return GetRandomString(new Random(), dictionary, length);
    }

    public static string GetRandomString(Random r, int length)
    {
        
    return GetRandomString(r, charDictionary, length);
    }

    public static string GetRandomString(Random r, string dictionary, int length)
    {
        
    if(r == null)
        {
            r 
    = new Random();
        }

        StringBuilder sb 
    = new StringBuilder();
        
    char[] chars = dictionary.ToCharArray();

        
    for(int i = 0; i < length; i++)
        {
            sb.Append(chars[r.Next(
    0, chars.Length)]);
        }

        
    return sb.ToString();
    }
    #endregion

    #region GetRandomFileName
    public static string GetRandomFileName()
    {
        
    return GetRandomFileName(new Random());
    }

    public static string GetRandomFileName(Random r)
    {
        
    long timeSpan = (long)(DateTime.Now - new DateTime(200011)).TotalMilliseconds;
        
    string fileName = ConvertToRadix(timeSpan, 36);
        fileName 
    += GetRandomString(r, 4);
        
    return fileName.ToLower();
    }
    #endregion

    #region ConvertToRadix
    public static string ConvertToRadix(long number, byte scale)
    {
        
    if(scale < 2 || scale > 36)
        {
            
    throw new Exception("Scale number must not be less than 2 and bigger then 36.");
        }

        
    char[] dictionary = charDictionary.ToCharArray();
        List
    <char> charList = new List<char>();
        
    long positive = Math.Abs(number);

        
    for(int i = 0; i < 64; i++)
        {
            
    if(positive == 0)
            {
                
    break;
            }

            charList.Add(dictionary[positive 
    % scale]);
            positive 
    /= scale;
        }

        charList.Reverse();
        
    return new string(charList.ToArray());
    }
    #endregion





  • 相关阅读:
    2017 ACM-ICPC西安网赛B-Coin
    Codeforces389D(SummerTrainingDay01-J)
    Codeforces672D(SummerTrainingDay01-I)
    VS2017.滚动条选项
    VS.自动调试
    ffmpeg.mp4.格式资料
    vs2017.unresolved external symbol __imp__fprintf&__imp____iob_func
    vs2017."const char *"的实参与"char *"的形参不兼容_goto跳过类型声明
    vue项目开发时怎么解决跨域
    vue奇怪的知识点又增加了
  • 原文地址:https://www.cnblogs.com/ericfine/p/801560.html
Copyright © 2020-2023  润新知