Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как превратить строку в число?
 
 автор: Владимир55   (22.04.2012 в 22:06)   письмо автору
 
 

Имеется обычная текстовая строка, например типа «Прекрасный праздник Первомай». Длина её может быть любой; возможны латиница, знаки и цифры. Требуется на основании этой строки каким-либо образом сформировать целое число, находящееся в заданных пределах, например в диапазоне от 3 до 30.

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

  Ответить  
 
 автор: cheops   (22.04.2012 в 22:18)   письмо автору
 
   для: Владимир55   (22.04.2012 в 22:06)
 

Хм... может начать отталкиваться от существующего хэша, скажем md5? В нем же фактически 16-ричные числа, т.е. берем первые или последние два, складываем, будет правда немного больше, 32 (но это поправить не сложно).

  Ответить  
 
 автор: Владимир55   (22.04.2012 в 22:35)   письмо автору
 
   для: cheops   (22.04.2012 в 22:18)
 

Интересно, а хэш md5, если его весь рассматривать как тридцатидвухразрядное шестнадцатиричное число, изменяется в диапазоне от единицы? Встречаеся ли случай, когда хеш 00000000000000000000000000000001 ?

  Ответить  
 
 автор: cheops   (22.04.2012 в 22:37)   письмо автору
 
   для: Владимир55   (22.04.2012 в 22:35)
 

Теоретически такое возможно, только вряд ли это будет осмысленный текст, да и текстом это вряд ли будет (однако, не уверен полностью, не разбирал алгоритм).

  Ответить  
 
 автор: Владимир55   (22.04.2012 в 22:39)   письмо автору
 
   для: cheops   (22.04.2012 в 22:37)
 

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

  Ответить  
 
 автор: cheops   (22.04.2012 в 22:45)   письмо автору
 
   для: Владимир55   (22.04.2012 в 22:39)
 

Хм... вообще можно попробовать, максимум вроде в районе 1х10e+77, если я ничего не путаю, а в числе с плавающей точкой двойной точности должно быть в районе 1х10e+308, т.е. запас есть. Сейчас попробуем.

  Ответить  
 
 автор: cheops   (22.04.2012 в 22:51)   письмо автору
 
   для: Владимир55   (22.04.2012 в 22:39)
 

Можно начать отталкиваться от следующего скрипта
<?php 
  $number 
= (float)base_convert("449aa40455f137fc8c41c41db6275528"1610);
  
$max = (float)base_convert("ffffffffffffffffffffffffffffffff"1610);
  echo 
round($number 32 $max);
?>

  Ответить  
 
 автор: Владимир55   (22.04.2012 в 22:57)   письмо автору
 
   для: cheops   (22.04.2012 в 22:51)
 

Замечательно!

Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования