llHash

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Summary

Function: integer llHash( string val );

Returns a 32bit hash for the provided string. Returns 0 if the input string is empty.
Returns an integer

• string val String to hash.

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

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.)

All Issues ~ Search JIRA for related Bugs

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

Functions

• llOrd Convert a character into an ordinal
• llChar Convert an ordinal into a character

Articles

•  "Wikipedia logo"List of hash functions
•  Hash Collision Probabilities

Deep Notes

Search JIRA for related Issues

Signature

function integer llHash( string val );