llHash
integer llHash(string val// String to hash.
);- Returns
integer- Energy
- 10
Returns an integer representing the 32-bit hash value of the string val (returns 0 if the string is empty).
Returns a 32bit hash for the provided string. Returns 0 if the input string is empty.
integer result = llHash("");Specification
Section titled “Specification”The SDBM algorithm provides a good general purpose hash function with a fairly even distribution across the 32 bit space in the general case.
The characters fed into the hash function are 32bit wide.
U32 SDBMHash(const std::wstring &val){ U32 hash(0);
for(const wchar_t &c: val) { hash = c + (hash << 6) + (hash << 16) - hash; } return hash;}In LSL:
integer llSDBMHash(string value){ integer hash = 0; integer index = 0; for (index = 0; index < llStringLength(value); ++index) { hash = llOrd(value, index) + (hash << 6) + (hash << 16) - hash; }
return hash;}Caveats
Section titled “Caveats”This hash value is not cryptographically secure and should not be used as part of any security protocol.
SDBM provides a good distribution of hash values across its range, however with only
32 bits the chance of a collision is unacceptably high.(with 1000 entries, the odds for a collision are about 1 in 10000.)
Examples
Section titled “Examples”Given the combination of the object name and the owner’s key generate a unique number. This number could be used for things
like selecting a chat channel that has a low probability of colliding with another object.
integer pickIDForObject(){ /* Generate an arbitrary integer ID for the combination of the * object name and the ower's key. This value could be used * for selecting a chat/listen channel. */ string obj_name = llGetObjectName(); key obj_owner = llGetOwner();
integer hash = llHash(obj_name + (string)obj_owner);
return hash;}See also
Section titled “See also”Functions
Section titled “Functions”Articles
Section titled “Articles”Original wiki source
Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.