ахаха, естественно у тебя коллизий так много )))
$sum = hexdec(substr($v,0,1))+hexdec(substr($v,1,1))+hexdec(substr($v,2,1))+hexdec(substr($v,3,1))+hexdec(substr($v,4,1))+hexdec(substr($v,5,1));
вот это вот жутко вариативность снижает.
Убери цикл и замени его этим вот:
PHP:
$hash = sprintf('%f', hexdec(md5($input)));
$slice = substr($hash, 0, 10);
Так у тебя коллизий будет сильно меньше, но я бы всё таки сделал отдельную таблицу соответствий.
-~{}~ 04.11.10 00:53:
с коррекцией коллизий. из какого-то хеша собираешь себе как-то 7-8 цифр, потом проверяешь коллизию и добавляешь счетчик коллизий в 1-2 разряда.
dimagolov
фигня это, а не коррекция коллизий.
суть хэша - ставить в
однозначное соответствие входную строку - выходной строке. у этой функции одно входное значение и одно выходное. только в этом случае хэш имеет смысл.
используя твой подход - он никогда, повторю,
никогда не сможет хэш сопоставить с исходным значением.