Sträng i orientformat från en stränginmatningsförlängning. (Svenska (Swedish))

Sträng i orientformat från en stränginmatningsförlängning.

Comments

NOTE: Apart from English (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

//

1 minute read

Små inlägg FTW

Liten men potentiellt användbar lösning på ett problem jag hade. Nämligen, hur man skapar ett GUID från en stränginmatning där Guid alltid är giltig men unik för varje given inmatningssträng.

Jag behövde den här för min RSS-flödesgenerator där jag ville generera en GUID för varje objekt i fodret som var repeterbar men unik för varje objekt.

Det visar sig att XxHash128 är ganska perfekt för detta eftersom det alltid ger en 128 bitars (eller 16 Byte) hasch. Detta innebär att det kan användas för att generera ett GUID från en stränginmatning utan 'Array'.Copy nonsens.

     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();
    }

Detta är en enkel förlängningsmetod som tar en stränginmatning och returnerar en GUID. I detta sammanhang är det viktigt att se till att XxHash128 är från System.IO.Hashing Namnrymd.

Du kan naturligtvis använda alla hashing algoritm som ger en 128 bit hash. I detta sammanhang är det viktigt att se till att XxHash128 är bara ett bra val eftersom det är snabbt och ger en bra fördelning av hashvärden.

Du kan också lämna tillbaka en new Guid(<string>) från detta för att få en verklig Guid som kan användas i en databas eller andra GUID specifika användningsfall.

logo

©2024 Scott Galloway