Уникальный идентификатор

vlad_2007

Новичок
Уникальный идентификатор

Добрый день.
После долгих поисков решил спросить. Нужно сгенерировать короткий уникальный хеш код по типу
http://www.youtube.com/watch?v=SpCDtn6_9KU SpCDtn6_9KU
Длина не должна превышать 15 символов.
Проверки сгенерированных ранне значений нет.
Есть ли алгоритм, которой с большой долей вероятности генерирует разные значения?
Гдето есть описание алгоритма, который использует youtube.com?
Заранее благодарен.

PS
Я использую вот такую функцию, но есть сомнения в связи с применением функции rand()
PHP:
    /**
    * Genarate hash for object
    *
    * @param int $number - count of symbols in hash
    * @return string hash
    */

    function generate_hash($number=URL_HASH_KEY_LENGTH)
    {
        $arr = array('a','b','c','d','e','f',
                     'g','h','i','j','k','l',
                     'm','n','o','p','r','s',
                     't','u','v','x','y','z',
                     'A','B','C','D','E','F',
                     'G','H','I','J','K','L',
                     'M','N','O','P','R','S',
                     'T','U','V','X','Y','Z',
                     '1','2','3','4','5','6',
                     '7','8','9','0','.','q',
                     '-','_','Q');
        $hash = "";
        $count=count($arr)-1;
        for($i = 0; $i < $number; $i++)
        {

          $index = mt_rand(0, $count);
          $hash .= $arr[$index];
        }
        return $hash;
    }
 

vlad_2007

Новичок
Автор оригинала: hermit_refined
а чем, кстати, простой автоинкремент не подходит?..
По автоинкременту можно получить доступ к всем объектам, по генерируемому ключу- нет.
 

phprus

Moderator
Команда форума
vlad_2007
Генерация ключа - это не способ защиты от несанкционированного доступа. Для этого применяются пароли и т.д. Для присвоения уникальных идентификаторов применяется автоинкремент.

Это не то что ты написал, а:
Хеши&#769;рование — преобразование входного массива данных в короткое число фиксированной длины (которое называется хешем или хеш-кодом) таким образом, чтобы с одной стороны, это число было значительно короче исходных данных, а с другой стороны, с большой вероятностью однозначно им соответствовало.
Информация взята из http://ru.wikipedia.org/wiki/Хеш-функция
 

StUV

Rotaredom
которой с большой долей вероятности генерирует разные значения
т.е. вариант затирания старых ссылок с малой долей вероятности все же устраивает ? =)))
 

akd

dive now, work later
Команда форума
vlad_2007, такой хеш тебя устроит - substr(md5("your autoincrement"), 0, 16) ? :)
 

vlad_2007

Новичок
Проблема состоит в том, что часть объектов защищена , а часть открыта для общего пользования.
Суть в том, что используя алгоритм привязки к id можна получить все объекты, которые открыты для общего пользования. поэтому желательно получить действительно случайное значение.
PHP:
for ($i=0;$i<...;$i++)
{
 $graber->get(func_id($i))
}
PS. Получить объекты и так можно, парся веб страницы, но это сложнее и более трудоемко, чем просто подставив айди в урл
 

phprus

Moderator
Команда форума
vlad_2007
Такая "защита" бессмысленна и даже опасна. Почему она опасна написал StUV.

А от выкачивания защититься невозможно, так как скачать весь сайт не на много труднее чем только какието страници. (Хотя можно лимитировать кол-во подключений с одного ip, например, так: http://php.spb.ru/other/_dima_noflood.php)

Для защиты и для недопущения доступа к чему-либо применяются пароли.

все объекты, которые открыты для общего пользования
Если объекты открыты для общего пользования, то какой смысл не давать возможность выкачать их все?
 

vlad_2007

Новичок
С StUV полностью согласен. Возможность затирания существует.

Если объекты открыты для общего пользования, то какой смысл не давать возможность выкачать их все?
В каталоге видна только часть их (малая). Остальная по поиску. Смысл в том чтобы на сайт ходили.

Это вроде того что сделать на сайте страничку /abvgd.html - и не вынести на нее линк(только для избранных ;))
А если все старанички нумеруются 1,2,3.... то так уже не сделаешь:)
 

kruglov

Новичок
Ну, нумеруйте файлы file_n_m, где n - автоинкремент, а m - какой-нить секретный хеш.
 

hermit_refined

Отшельник
если действительно хотите, можно:
1. генерировать случайное и присоединять к нему id.
2. генерировать случайное. поле этого ключа в таблице бд в любом случае должно быть unique, потому: если даже не вставится - ничего страшного, сгенерируете новый и вставите с ним (при том - дай бог, чтобы у вас хоть раз такое произошло, при достаточной длине ключа).
3. ...
 

vlad_2007

Новичок
Всем большое спасибо!
О окончательной реализации обязательно напишу.

PS Читал Ваш форум давно, но что здесь так быстро отвечают, никогда бы не подумал.
Еще раз спасибо.
 
Сверху