Base 62 jest używany przez tinyurl i bit.ly dla skróconych adresów URL. Jest to dobrze znana metoda tworzenia „unikalnych”, czytelnych dla człowieka identyfikatorów. Oczywiście będziesz musiał przechowywać utworzone identyfikatory i sprawdzać duplikaty podczas tworzenia, aby zapewnić ich niepowtarzalność. (Zobacz kod na dole odpowiedzi)
Metryki niepowtarzalności Base 62
5 znaków w bazie 62 daje 62 ^ 5 unikalnych identyfikatorów = 916 132 832 (~ 1 miliard) Przy 10 tys. Identyfikatorów dziennie będzie dobrze przez ponad 91 tys. Dni
6 znaków w bazie 62 daje 62 ^ 6 unikalnych identyfikatorów = 56800235584 (ponad 56 miliardów) Przy 10 tys. Identyfikatorów dziennie będziesz w porządku przez ponad 5 milionów dni
Podstawowe wskaźniki niepowtarzalności 36
6 znaków zapewni 36 ^ 6 unikalnych identyfikatorów = 2,176,782,336 (ponad 2 miliardy)
7 znaków zapewni 36 ^ 7 unikalnych identyfikatorów = 78,364,164,096 (ponad 78 miliardów)
Kod:
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();
}
}
Wynik:
z5KyMg
wd4SUp
uSzQtH
UPrGAT
UIf2IS
QCF9GNM5
0UV3TFSS
3MG91VKP
7NTRF10T
AJK3AJU7