FANDOM


This page documents a user-defined function that you can copy and paste into your addon. Replace PREFIX with your addon or lib prefix to avoid conflicts between different versions of these functions.
User defined functions
StringHash - by Template:User -


Return a fair-quality 32-bit hash of a string

hashVal = StringHash("string")


Example Edit

> print(StringHash(""))
1 
> print(StringHash("ab"))
3458343178
> print(StringHash("ba"))
3466747145
> print(StringHash("AB"))
2653593770
> print(StringHash("BA"))
2661997737
> print(StringHash("The quick brown fox jumps over the lazy dog"))
3402772626

DetailsEdit

  • This algorithm is ~30% faster than a Lua implementation of the Java String.hashCode library call
  • The bit transmutation patterns and resulting collision rates are MUCH better than the results from the Java hash

CodeEdit

local function StringHash(text)
  local counter = 1
  local len = string.len(text)
  for i = 1, len, 3 do 
    counter = math.fmod(counter*8161, 4294967279) +  -- 2^32 - 17: Prime!
  	  (string.byte(text,i)*16776193) +
  	  ((string.byte(text,i+1) or (len-i+256))*8372226) +
  	  ((string.byte(text,i+2) or (len-i+256))*3932164)
  end
  return math.fmod(counter, 4294967291) -- 2^32 - 5: Prime (and different from the prime in the loop)
end
Community content is available under CC-BY-SA unless otherwise noted.