«Хеш» - это решение, созданное для решения точно проблемы, которую вы описываете. См. статью в Википедии
Любая хеш-функция, которую вы используете, будет хороша; хеш-функции, как правило, оцениваются на основе следующих критериев:
- Степень, до которой они предотвращают столкновения (два отдельных входа, производящие один и тот же выход) - побочным продуктом этого является степень, до которой функция минимизирует выходы, которые никогда не могут быть достигнуты с любого входа .
- Равномерность распределения его выходов с учетом равномерно распределенного набора входов
- Степень, в которой небольшие изменения на входе создают большие изменения на выходе.
(см. идеальная хеш-функция )
Учитывая, насколько сложно создать хеш-функцию, которая максимизирует все эти критерии, почему бы просто не использовать одну из наиболее часто используемых и надежных существующих хеш-функций, которые уже существуют?
Из того, что кажется, превращение целых чисел в строки почти похоже на еще один уровень шифрования! (я думаю, это хорошо для ваших целей)
Тем не менее, ваш вопрос требует хеш-функций, которые имеют дело конкретно с числами , так что мы идем.
Хеш-функции, которые работают над целыми числами
Если вы хотите позаимствовать уже существующие алгоритмы, вы можете поиграть в генераторах псевдослучайных чисел
Одним из простых является метод среднего квадрата:
- Взять цифру
- Квадрат это
- Отрежьте цифры и оставьте средние цифры той же длины, что и ваш оригинал.
т
1111 => 01234321 => 2342
так, 1111 будет "хеширован" до 2342, в методе среднего квадрата.
Этот способ не не так эффективен , но для небольшого числа хэшей он имеет очень низкую частоту столкновений, равномерное распределение и большой потенциал хаоса (небольшие изменения => большие изменения). Но если у вас много значений, пора искать что-то еще ...
Дедушка всех практически эффективных и простых генераторов случайных чисел (Мерсенн Твистер) [http://en.wikipedia.org/wiki/Mersenne_twister]. Фактически, реализация, вероятно, существует для каждого мыслимого языка программирования. Ваш хэш "input" - это то, что будет называться "seed" в их терминологии.
В заключение
- Ничего плохого в строковых хеш-функциях
- Если вы хотите придерживаться целых чисел и проявить фантазию, попробуйте использовать свой номер в качестве начального числа для генератора псевдослучайных чисел.