Base 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 000 идентификаторов в день вы будете в порядке в течение 5 миллионов дней
Методы уникальности Base 36
6 символов дадут вам 36 ^ 6 уникальных идентификаторов = 2 176 782 336 (2+ миллиарда)
7 символов дадут вам 36 ^ 7 уникальных идентификаторов = 78 364 164 096 (78+ миллиардов)
Код:
public void TestRandomIdGenerator()
{
// create five IDs of six, base 62 characters
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase62(6));
// create five IDs of eight base 36 characters
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
3MG91VKP
7NTRF10T
AJK3AJU7