База 62 используется командами tinyurl и bit.ly для сокращенных URL. Это хорошо известный метод создания «уникальных», удобочитаемых идентификаторов. Конечно, вам нужно будет хранить созданные идентификаторы и проверять наличие дубликатов при создании, чтобы гарантировать уникальность. (См. Код внизу ответа)
Базовые 62 показателя уникальности
5 символов в базе 62 дадут вам 62 ^ 5 уникальных идентификаторов = 916,132,832 (~ 1 миллиард). При 10 тыс. Идентификаторов в день вы будете в порядке в течение более 91 тыс. Дней.
6 символов в базе 62 дадут вам 62 ^ 6 уникальных идентификаторов = 56 800 235 584 (56+ миллиардов). При 10 тысячах идентификаторов в день вы будете в порядке в течение 5+ миллионов дней.
Базовые 36 показателей уникальности
6 символов дадут вам 36 ^ 6 уникальных идентификаторов = 2,176,782,336 (2+ миллиарда)
7 символов дадут вам 36 ^ 7 уникальных идентификаторов = 78,364,164,096 (78+ миллиардов)
Код:
public void TestRandomIdGenerator()
{
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase62(6));
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase36(8));
}
public static class RandomIdGenerator
{
private static char[] _base62chars =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
.ToCharArray();
private static Random _random = new Random();
public static string GetBase62(int length)
{
var sb = new StringBuilder(length);
for (int i=0; i<length; i++)
sb.Append(_base62chars[_random.Next(62)]);
return sb.ToString();
}
public static string GetBase36(int length)
{
var sb = new StringBuilder(length);
for (int i=0; i<length; i++)
sb.Append(_base62chars[_random.Next(36)]);
return sb.ToString();
}
}
Выход:
z5KyMg
wd4SUp
uSzQtH
UPrGAT
UIf2IS
QCF9GNM5
0UV3TFSS
3МГ91ВКП
7НТРФ10Т
AJK3AJU7