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
Pequeña pero potencialmente útil solución a un problema que estaba teniendo. Es decir, cómo generar un GUID a partir de una entrada de cadena donde el Guid es siempre válido pero único para cualquier cadena de entrada dada.
Necesitaba esto para mi Generador de alimentación RSS donde quería generar una GUIA para cada elemento en la fuente que era repetible pero único para cada elemento.
Resulta que la XxHash128
es un poco perfecto para esto, ya que siempre da un hachís de 128 bits (o 16 bytes). Esto significa que se puede utilizar para generar un GUID a partir de una entrada de cadena sin 'Array'.Copiar tonterías.
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();
}
Este es un método de extensión simple que toma una entrada de cadena y devuelve una GUID. Los XxHash128
es de la System.IO.Hashing
espacio de nombres.
Usted puede, por supuesto, utilizar cualquier algoritmo de hashing que da un hash de 128 bits. Los XxHash128
es sólo una buena opción, ya que es rápido y da una buena distribución de valores de hash.
También podría devolver un new Guid(<string>)
de esto para obtener un Guid real que se puede utilizar en una base de datos u otros casos de uso específicos de GUID.