Short URL: Generatore random di lunghezza variabile

Short URL Generator

Hai mai avuto la necessità di generare un Short URL all’interno del tuo codice sorgente? Ecco una possibile soluzione per ottimizzare la generazione e la diffusione di link con una BaseURL personalizzata col proprio dominio.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private string GenerateShortURL(int lenght, string[] charsToExclude)
{
    byte[] bytes = Encoding.ASCII.GetBytes
                    (
                        $"{Guid.NewGuid()}"
                    );

    var base64raw = Convert.ToBase64String
        (
            bytes
        );

    foreach (var item in charsToExclude)
    {
        base64raw = base64raw.Replace(item, string.Empty);
    }

    var random = new Random(Guid.NewGuid().GetHashCode());

    if(lenght> base64raw.Length)
    {
        lenght = base64raw.Length;
    }

    int start = random.Next(0, base64raw.Length - lenght);

    return base64raw.Substring(start, lenght);
}

Come funziona?

  • Vi basterà effettuare la chiamata a GenerateShortURL fornendo due parametri
  • lenght: di quanti caratteri volete il vostro short url?
  • charsToExclude: volete escludere dei caratteri? Ecco, vi basterà definirli in questo parametro

Ora vi mostro l’esempio pratico

1
2
var charsToExclude = new string[] { "/", "+", "=" };
string shortUrl = GenerateShortURL(10,charsToExclude);

Cosa manca?

Vi elenco alcuni punti/spunti che mancano in questo esempio proposto:

  • Salvare i risultati di GenerateShortURL utilizzati nel vostro database
  • Escludere quelli utilizzati dai risultati quelli validi. Non vorreste lo stesso url che punta concettualmente a due indirizzi diversi, vero?
  • Implementare le rotte di ingresso e su questo buon divertimento!

Test

Ho effettuato dei test generando ben 500000 e 1000000 shortUrl di lunghezza pari a 10.

UnivociGenerati
497342500000
497338500000
497396500000
9896111000000
9895541000000
9895661000000

Come avrete notato, la percentuale di quelli validi è interessante!