# Σκελετός μορφής Guid από μια επέκταση εισαγωγής συμβολοσειρών.

<!--category-- C# -->
<datetime class="hidden">2024-08-07T17:17</datetime>

## Μικρές θέσεις FTW

Μικρή αλλά ενδεχομένως χρήσιμη λύση σε ένα πρόβλημα που είχα. Δηλαδή, πώς να δημιουργήσετε ένα GUID από μια συμβολοσειρά εισόδου όπου η Guid είναι πάντα έγκυρη αλλά μοναδική για κάθε δεδομένη συμβολοσειρά εισόδου.

Το χρειαζόμουν αυτό για μένα. [γεννήτρια τροφοδοσίας RSS](/blog/addinganrssfilewithaspnetcore) όπου ήθελα να δημιουργήσω ένα GUID για κάθε αντικείμενο στην τροφή που ήταν επαναλαμβανόμενο αλλά μοναδικό για κάθε αντικείμενο.

Από ό,τι φαίνεται... `XxHash128` είναι κάπως τέλειο για αυτό, καθώς δίνει πάντα 128 bit (ή 16 Byte) hash. Αυτό σημαίνει ότι μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός GUID από μια συμβολοσειρά εισόδου χωρίς 'Array'.Copy ανοησίες.

```csharp
     public  static string ToGuid(this string  name)
    {
        var buf = Encoding.UTF8.GetBytes(name);
        var guid = XxHash128.Hash(buf);
        var guidS =  string.Format("{0:X2}{1:X2}{2:X2}{3:X2}-{4:X2}{5:X2}-{6:X2}{7:X2}-{8:X2}{9:X2}-{10:X2}{11:X2}{12:X2}{13:X2}{14:X2}{15:X2}", 
            guid[0], guid[1], guid[2], guid[3], guid[4], guid[5], guid[6], guid[7], guid[8], guid[9], guid[10], guid[11], guid[12], guid[13], guid[14], guid[15]);
        return guidS.ToLowerInvariant();
    }
```

Αυτή είναι μια απλή μέθοδος επέκτασης που παίρνει μια συμβολοσειρά εισόδου και επιστρέφει ένα GUID. Η `XxHash128` είναι από το `System.IO.Hashing` Διάστημα ονομάτων.

Μπορείτε φυσικά να χρησιμοποιήσετε κάθε αλγόριθμο hashing που δίνει ένα 128 κομμάτι χασίς. Η `XxHash128` είναι απλά μια καλή επιλογή καθώς είναι γρήγορη και δίνει μια καλή κατανομή των αξιών χασίς.

Θα μπορούσατε επίσης να επιστρέψετε ένα `new Guid(<string>)` από αυτό για να πάρετε μια πραγματική Guid που μπορεί να χρησιμοποιηθεί σε μια βάση δεδομένων ή άλλες ειδικές περιπτώσεις χρήσης GUID.