Будет ли следующий сгенерированный хэш всегда отличаться для разных ключей, при условии, что целое число хеша никогда не переполняется? Ключ должен содержать символы в кодировке ascii.
Я думаю, что это так, поскольку я не могу думать об исключительном случае.
char[] arr = "abcd"
int hash = 0
for (int i=0; i<arr.size; i++) {
hash += (i+1) * arr[i]
}
EDIT1: Хотя нижеприведенные ответы являются технически правильными ответами на мой первоначальный вопрос, я должен был упомянуть, что домен ключей — это домен действительных идентификаторов электронной почты. Таким образом, некоторые символы ascii не включены. Тем не менее, я проведу некоторые тесты и отчитаюсь. Единственная проблема в том, что перечислить все перманенты можно только до небольшой длины.
В любом случае, мое требование состоит в том, чтобы создавать уникальные идентификаторы на основе идентификаторов электронной почты и использовать их в качестве первичных ключей в базе данных. Просто не хотите использовать сами почтовые идентификаторы.
EDIT2: Хорошо, по-видимому, есть множество столкновений. например, хэш [email protected] == хэш [email protected]
...
040 == 012
041 == 013
042 == 014
043 == 015
044 == 016
045 == 017
046 == 018
047 == 019
048 == 01:
...
Мне нужен другой алгоритм хеширования. Можете ли вы предложить любой?