Tinyurl y bit.ly utilizan Base 62 para las URL abreviadas. Es un método bien conocido para crear ID "únicos" legibles por humanos. Por supuesto, tendrá que almacenar los ID creados y verificar si hay duplicados en la creación para garantizar la singularidad. (Vea el código al final de la respuesta)
Métricas de singularidad base 62
5 caracteres en la base 62 le darán 62 ^ 5 ID únicos = 916,132,832 (~ 1 mil millones) Con 10k ID por día, estará bien durante 91k + días
6 caracteres en la base 62 le darán 62 ^ 6 ID únicos = 56,800,235,584 (más de 56 mil millones) Con 10k ID por día, estará bien durante más de 5 millones de días
Métricas de singularidad base 36
6 caracteres le darán 36 ^ 6 ID únicos = 2,176,782,336 (2+ mil millones)
7 caracteres le darán 36 ^ 7 ID únicos = 78,364,164,096 (78+ mil millones)
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();
}
}
Salida:
z5KyMg
wd4SUp
uSzQtH
UPrGAT
UIf2IS
QCF9GNM5
0UV3TFSS
3MG91VKP
7NTRF10T
AJK3AJU7