Преобразование хеша MD5 в набор целых чисел - PullRequest
1 голос
/ 06 марта 2012

Я хотел бы показать случайное изображение для каждого пользователя в моей системе. Однако конкретный пользователь должен всегда получать одно и то же случайное изображение каждый раз, поэтому я должен иметь возможность генерировать идентификатор изображения, если требуется.

Я думаю об использовании MD5 имени пользователя для генерации числа. Моя система использует JavaScript, и я использую библиотеку jQuery.

Например, если есть 4 варианта случайного изображения, я бы хотел передать имя как таковое и получить целое число.

$image_id = getImage(name);

Примечание: нет необходимости, чтобы вероятности были точными. То есть меня не волнует, является ли одно из изображений более популярным, чем другие.

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Вам нужна случайная функция JavaScript, которая также принимает начальное число.Затем вы можете создать числовую версию имени пользователя (или использовать его ID #) и передать его в качестве начального числа вашей новой функции.

Существует способ сделать это, опубликованный здесь: SeedableГенератор случайных чисел JavaScript

Как только вы это сделаете, вы будете каждый раз получать одно и то же случайное число.Оттуда вы можете выбрать это случайное число, чтобы выбрать индекс из массива изображений.

0 голосов
/ 09 марта 2012

Простое сопоставление строки с целочисленной функцией

Хорошо, я написал свою маленькую функцию.Надеюсь, это кому-нибудь пригодится.

Функция суммирует коды символов для каждого из символов в строке, а затем использует модуль, чтобы уменьшить число до указанного максимума.Кажется довольно эффективным.

Nb Это не математически случайный, но он довольно хорош для выбора повторяющегося случайного варианта из строки.

function getMappedCode(string, max_number_desired)
{
  var char_code_total = 0;  
  for(var i = 0; i < string.length; i++) {
    char_code_total += string.charCodeAt(i);  
  }  
  return char_code_total % max_number_desired;
}

var mapped_code = getMappedCode("tom finney", 10);

alert(mapped_code);
...