StringHash

StringHash - by -
Return a fair-quality 32-bit hash of a string
 hashVal = StringHash("string")
== Example ==
 > 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
==Details==
* 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
* See StringHash/Analysis
==Code==
 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
__NOTOC__
Category:User defined functions