Присвойте число (от 1 до 9) хешу md5 - PullRequest
3 голосов
/ 21 октября 2010

Наличие хеша md5, например:

md5("test") = "098f6bcd4621d373cade4e832627b4f6"

Как мне написать функцию, которая будет возвращать число от 1 до 9 каждый раз, когда я передаю ему хэш md5? Номер всегда должен быть одинаковым, т.е. myfunc ("098f6bcd4621d373cade4e832627b4f6") всегда должен возвращать один и тот же номер Спасибо за вашу помощь.

Ответы [ 6 ]

5 голосов
/ 21 октября 2010

Это WAY-излишество, и предложение возврата самой левой цифры является лучшим ...

function myfunc($md5) {
    $total = 0;
    foreach (str_split($md5) as $char) $total += ord($char);
    return $total % 9 + 1;
}

echo myfunc("098f6bcd4621d373cade4e832627b4f6");

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

Или, более компактная версия:

function myfunc2($md5) {
    return array_sum(array_map("ord", str_split($md5))) % 9 + 1;
}

Вы можете даже передать мин и макс как аргументы:

function myfunc2($md5, $min = 1, $max = 9) {
    return array_sum(array_map("ord", str_split($md5))) % $max + $min;
}

myfunc2("098f6bcd4621d373cade4e832627b4f6", 10, 20);
4 голосов
/ 21 октября 2010

Самый простой способ: найти первое число в md5 и вернуть его :) Вы можете сделать это с помощью регулярных выражений. Конечно, не забудьте иметь какое-нибудь безопасное возвращаемое значение, если число не найдено (но это вряд ли когда-либо случится).

3 голосов
/ 21 октября 2010

Возврат 1 все время. Соответствует спецификации!

А если серьезно, что вам нужно для обозначения этого числа?

2 голосов
/ 21 октября 2010

Вы по сути хотите хеш-функцию вашей хеш-функции. Это был бы некоторый код psedo:

int hashhash(string hash)
    return (hash[0] % 9) + 1;
2 голосов
/ 21 октября 2010

Вернуть крайнюю левую цифру (конечно, в 1..9) в хэше, рассматриваемом как строка.

Или я пропустил точку?

1 голос
/ 21 октября 2010

Вот решение:

return substr(base_convert($md5, 16, 9), -1) + 1;

Это то, что вы, вероятно, хотите, хотя вы этого не сказали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...