How to generate a random string, and specify the length you want, or better generate unique string on specification you want

前端 未结 11 2356
一生所求
一生所求 2020-12-24 06:24

There is a library to generate Random numbers, so why isn\'t there a library for generation of random strings?

In other words how to generate a random string, and sp

11条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-24 07:09

    Random string using Concatenated GUIDs

    This approach uses the minimum number of concatenated GUIDs to return a random string of the desired number of characters.

        /// 
        /// Uses concatenated then SubStringed GUIDs to get a random string of the
        /// desired length. Relies on the randomness of the GUID generation algorithm.
        /// 
        /// Length of string to return
        /// Random string of  characters
        internal static string GetRandomString(int stringLength)
        {
            StringBuilder sb = new StringBuilder();
            int numGuidsToConcat = (((stringLength - 1) / 32) + 1);
            for(int i = 1; i <= numGuidsToConcat; i++)
            {
                sb.Append(Guid.NewGuid().ToString("N"));
            }
    
            return sb.ToString(0, stringLength);
        }
    

    Example output with a length of 8:

    39877037
    2f1461d8
    152ece65
    79778fc6
    76f426d8
    73a27a0d
    8efd1210
    4bc5b0d2
    7b1aa10e
    3a7a5b3a
    77676839
    abffa3c9
    37fdbeb1
    45736489
    

    Example output with a length of 40 (note the repeated '4' - in a v4 GUID, thee is one hex digit that will always be a 4 (effectively removing 4 bits) -- the algorithm could be improved by removing the '4' to improve randomness, given that the returned length of the string can be less than the length of a GUID (32 chars)...):

    e5af105b73924c3590e99d2820e3ae7a3086d0e3
    e03542e1b0a44138a49965b1ee434e3efe8d063d
    c182cecb5f5b4b85a255a397de1c8615a6d6eef5
    676548dc532a4c96acbe01292f260a52abdc4703
    43d6735ef36841cd9085e56f496ece7c87c8beb9
    f537d7702b22418d8ee6476dcd5f4ff3b3547f11
    93749400bd494bfab187ac0a662baaa2771ce39d
    335ce3c0f742434a904bd4bcad53fc3c8783a9f9
    f2dd06d176634c5b9d7083962e68d3277cb2a060
    4c89143715d34742b5f1b7047e8107fd28781b39
    2f060d86f7244ae8b3b419a6e659a84135ec2bf8
    54d5477a78194600af55c376c2b0c8f55ded2ab6
    746acb308acf46ca88303dfbf38c831da39dc66e
    bdc98417074047a79636e567e4de60aa19e89710
    a114d8883d58451da03dfff75796f73711821b02
    

    C# Fiddler Demo: https://dotnetfiddle.net/Y1j6Dw

提交回复
热议问题