A base 62 é usada por tinyurl e bit.ly para os URLs abreviados. É um método bem conhecido para a criação de IDs "exclusivos" e legíveis por humanos. Claro, você terá que armazenar os IDs criados e verificar se há duplicatas na criação para garantir a exclusividade. (Veja o código no final da resposta)
Métricas de exclusividade de base 62
5 caracteres na base 62 darão a você 62 ^ 5 IDs únicos = 916.132.832 (~ 1 bilhão) Com 10k IDs por dia, você ficará bem por 91k + dias
6 caracteres na base 62 darão a você 62 ^ 6 IDs únicos = 56.800.235.584 (56+ bilhões) Com 10.000 IDs por dia, você estará ok por mais de 5 milhões de dias
Métricas de exclusividade de base 36
6 caracteres fornecerão 36 ^ 6 IDs únicos = 2.176.782.336 (2+ bilhões)
7 caracteres fornecerão 36 ^ 7 IDs exclusivos = 78.364.164.096 (mais de 78 bilhões)
Código:
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();
}
}
Resultado:
z5KyMg
wd4SUp
uSzQtH
UPrGAT
UIf2IS
QCF9GNM5
0UV3TFSS
3MG91VKP
7NTRF10T
AJK3AJU7