Строка в целочисленную функцию хеширования с точностью

Я хочу хэшировать массив символов в int или long. Результирующее значение должно соответствовать заданному значению точности. Функция, которую я использовал, приведена ниже:

<code>int GetHash(const char* zKey, int iPrecision /*= 6*/)
{
        /////FROM : http://courses.cs.vt.edu/~cs2604/spring02/Projects/4/elfhash.cpp

        unsigned long h = 0;
        long M = pow(10, iPrecision);

        while(*zKey)
        {
                h = (h << 4) + *zKey++;
                unsigned long g = h & 0xF0000000L;
                if (g) h ^= g >> 24;
                h &= ~g;
        }            

        return (int) (h % M);
}
</code>

Строка для хэширования аналогична "SAEUI1210.00000010_1".

Однако в некоторых случаях это приводит к дублированию значений. Есть ли хорошие альтернативы, которые бы не дублировали один и тот же хеш для разных строковых значений.

Ответы на вопрос(4)

Ваш ответ на вопрос