Base 62, tinyurl ve bit.ly tarafından kısaltılmış URL'ler için kullanılır. "Benzersiz", insan tarafından okunabilir kimlikler oluşturmak için iyi anlaşılmış bir yöntemdir. Elbette, benzersizliği sağlamak için oluşturulan kimlikleri kaydetmeniz ve oluşturma sırasında kopyaları kontrol etmeniz gerekecektir. (Cevabın altındaki koda bakın)
Base 62 benzersizlik ölçümleri
62 tabanındaki 5 karakter size 62 ^ 5 benzersiz kimlik verir = 916.132.832 (~ 1 milyar) Günde 10.000 kimlikte 91.000'den fazla gün boyunca uygun olacaksınız
62 tabanındaki 6 karakter size 62 ^ 6 benzersiz kimlik verir = 56.800.235.584 (56+ milyar) Günde 10.000 kimlik ile 5 milyondan fazla gün boyunca iyi olacaksınız
Temel 36 benzersizlik ölçümleri
6 karakter size 36 ^ 6 benzersiz kimlik verir = 2.176.782.336 (2+ milyar)
7 karakter size 36 ^ 7 benzersiz kimlik verir = 78,364,164,096 (78+ milyar)
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();
}
}
Çıktı:
z5KyMg
wd4SUp
uSzQtH
UPrGAT
UIf2IS
QCF9GNM5
0UV3TFSS
3MG91VKP
7NTRF10T
AJK3AJU7