How can I generate random alphanumeric strings?

后端 未结 30 3285
予麋鹿
予麋鹿 2020-11-22 03:17

How can I generate a random 8 character alphanumeric string in C#?

30条回答
  •  独厮守ぢ
    2020-11-22 03:56

    Solution 1 - largest 'range' with most flexible length

    string get_unique_string(int string_length) {
        using(var rng = new RNGCryptoServiceProvider()) {
            var bit_count = (string_length * 6);
            var byte_count = ((bit_count + 7) / 8); // rounded up
            var bytes = new byte[byte_count];
            rng.GetBytes(bytes);
            return Convert.ToBase64String(bytes);
        }
    }
    

    This solution has more range than using a GUID because a GUID has a couple of fixed bits that are always the same and therefore not random, for example the 13 character in hex is always "4" - at least in a version 6 GUID.

    This solution also lets you generate a string of any length.

    Solution 2 - One line of code - good for up to 22 characters

    Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8);
    

    You can't generate strings as long as Solution 1 and the string doesn't have the same range due to fixed bits in GUID's, but in a lot of cases this will do the job.

    Solution 3 - Slightly less code

    Guid.NewGuid().ToString("n").Substring(0, 8);
    

    Mostly keeping this here for historical purpose. It uses slightly less code, that though comes as the expense of having less range - because it uses hex instead of base64 it takes more characters to represent the same range compared the other solutions.

    Which means more chance of collision - testing it with 100,000 iterations of 8 character strings generated one duplicate.

提交回复
热议问题