/// <summary> /// Get the FNV64 hash for use as the IID for a CLIP but ignoring age and species. /// </summary> /// <param name="text">The CLIP name to get the generic hash for.</param> /// <returns>The generic hash value</returns> public static ulong GetHashGeneric(string text) { string value = GetGenericValue(text); ulong hash = FNV64.GetHash(value); hash &= 0x7FFFFFFFFFFFFFFF; return(hash); }
/// <summary> /// Get the FNV64 hash for use as the IID for a CLIP of a given name. /// </summary> /// <param name="text">the CLIP name to get the hash for</param> /// <returns>the hash value</returns> public static new ulong GetHash(string text) { string value = text; ulong mask = 0; string[] split = text.Split(new char[] { '_', }, 2); if (split.Length > 1 && split[0].Length <= 5) { string[] x2y = split[0].Split(new char[] { '2', }, 2); if (x2y[0].Length > 0 && x2y[0].Length <= 2) { byte xAge = Mask(x2y[0]); if (x2y.Length > 1 && x2y[1].Length > 0 && x2y[1].Length <= 2) { if (!(ao.Contains(x2y[0]) && ao.Contains(x2y[1]))) { byte yAge = Mask(x2y[1]); value = string.Join("_", new string[] { (x2y[0][0] == 'o' ? "o" : "a") + "2" + (x2y[1][0] == 'o' ? "o" : "a"), split[1], }); mask = (ulong)(0x8000 | xAge << 8 | yAge); } } else if (!ao.Contains(x2y[0])) { value = string.Join("_", new string[] { "a", split[1], }); mask = (ulong)(0x8000 | xAge << 8); } } } ulong hash = FNV64.GetHash(value); hash &= 0x7FFFFFFFFFFFFFFF; hash ^= mask << 48; return(hash); }