La base 62 è usata da tinyurl e bit.ly per gli URL abbreviati. È un metodo ben noto per creare ID "univoci" leggibili dall'uomo. Ovviamente dovrai memorizzare gli ID creati e controllare i duplicati durante la creazione per assicurarne l'unicità. (Vedi il codice in fondo alla risposta)
Base 62 metriche di unicità
5 caratteri in base 62 ti daranno 62 ^ 5 ID univoci = 916.132.832 (~ 1 miliardo) A 10k ID al giorno starai bene per 91k + giorni
6 caratteri in base 62 ti daranno 62 ^ 6 ID univoci = 56.800.235.584 (più di 56 miliardi) Con 10.000 ID al giorno starai bene per 5+ milioni di giorni
Base 36 metriche di unicità
6 caratteri ti daranno 36 ^ 6 ID univoci = 2.176.782.336 (2+ miliardi)
7 caratteri ti daranno 36 ^ 7 ID univoci = 78.364.164.096 (78+ miliardi)
Codice:
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();
}
}
Produzione:
z5KyMg
wd4SUp
uSzQtH
UPrGAT
UIf2IS
QCF9GNM5
0UV3TFSS
3MG91VKP
7NTRF10T
AJK3AJU7