public string GetRandomString(int length)
{
if (length < 1 || length > 12)
throw new ArgumentOutOfRangeException(nameof(length), "Length must be between 1 and 12; 36^13 overflows Int64.MaxValue");
lock (_randomLock)
{
var maxRandom = (long)Math.Pow(36, length);
_random.NextBytes(_randomBuffer);
var random = Math.Abs(BitConverter.ToInt64(_randomBuffer, 0) % maxRandom);
string encoded = Base36Converter.FromLong(random);
return encoded.Length > length ?
encoded.Substring(0, length) :
encoded.PadLeft(length, '0');
}
}