База 62 використовується tinyurl та bit.ly для скорочених URL-адрес. Це добре зрозумілий метод створення "унікальних", зручних для читання ідентифікаторів. Звичайно, вам доведеться зберігати створені ідентифікатори та перевіряти наявність дублікатів при створенні, щоб забезпечити унікальність. (Див. Код внизу відповіді)
Основа 62 метрики унікальності
5 символів в базі 62 дадуть вам 62 ^ 5 унікальних ідентифікаторів = 916 1332 832 (~ 1 мільярд) При 10 000 ідентифікаторів на день ви будете в порядку протягом 91 000 + днів
6 символів в базі 62 дадуть вам 62 ^ 6 унікальних ідентифікаторів = 56 800 235 584 (56+ мільярдів). При 10 000 ідентифікаторів на день ви будете в порядку протягом 5+ мільйонів днів
База 36 метрик унікальності
6 символів дадуть вам 36 ^ 6 унікальних ідентифікаторів = 2176782366 (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
3MG91VKP
7NTRF10T
AJK3AJU7