NOTE: Apart from
(and even then it's questionable, I'm Scottish). These are machine translated in languages I don't read. If they're terrible please contact me.
You can see how this translation was done in this article.
Wednesday, 07 August 2024
//Less than a minute
Μικρή αλλά ενδεχομένως χρήσιμη λύση σε ένα πρόβλημα που είχα. Δηλαδή, πώς να δημιουργήσετε ένα GUID από μια συμβολοσειρά εισόδου όπου η Guid είναι πάντα έγκυρη αλλά μοναδική για κάθε δεδομένη συμβολοσειρά εισόδου.
Το χρειαζόμουν αυτό για μένα. γεννήτρια τροφοδοσίας RSS όπου ήθελα να δημιουργήσω ένα GUID για κάθε αντικείμενο στην τροφή που ήταν επαναλαμβανόμενο αλλά μοναδικό για κάθε αντικείμενο.
Από ό,τι φαίνεται... XxHash128
είναι κάπως τέλειο για αυτό, καθώς δίνει πάντα 128 bit (ή 16 Byte) hash. Αυτό σημαίνει ότι μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός GUID από μια συμβολοσειρά εισόδου χωρίς 'Array'.Copy ανοησίες.
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.