За последние 24 часа нас посетили 73579 программистов и 10173 робота. Сейчас ищут 3019 программистов ...

генерация 8-ми символьного уникального хэша

Тема в разделе "PHP для новичков", создана пользователем mk-ned, 27 май 2015.

  1. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    я же привел функцию. почти аналог uniqid() только генерит строку длиной 8 символов. как раз как нужно.

    Добавлено спустя 39 минут 19 секунд:
    но есть косяк)
    через 640 лет она начнет возвращать 9 символьные хеши
     
  2. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    по моему что то не то, всё пропадает, белый лист
     
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (Text):
    1. echo getUniqId();
    и включи вывод ошибок
     
  4. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    Fatal error: Call to undefined function pr() in /var/www/html/example.php on line 22
     
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ну убери эту pr()
    сникерсни
     
  6. mk-ned

    mk-ned Новичок

    С нами с:
    19 фев 2014
    Сообщения:
    25
    Симпатии:
    0
    спасибо убрал, работает, но до определённого времени меняется только последние 3-4 символы, нельзя сделать так чтоб целиком менялся?
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    в данной реализации нет.
     
  8. shturman

    shturman Активный пользователь

    С нами с:
    27 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    можно ещё так

    PHP:
    1. hash('crc32', time().rand());  // 88ac35be
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    trim(base64_encode(random_bytes(5)), '=');

    типа того
     
    shturman нравится это.
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Присоединяюсь - автоинкремент самый экономичный вариант.
    Просто его необходимо доработать под Вашу задачу.
    А именно кодировать цифры автоинкремента случайным символом из набора заранее выбранного алфавита. Например:
    0 - кодировать набором 0, a, b
    1 - 1,c,d
    2 - 2, e, f ... и т.д.
    Алгоритм следующий:
    1. выбираете последнюю запись из БД
    2. декодируете ее в число
    3. прибавляете 1
    4. кодируете случайными символами
     
  11. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    PHP:
    1. echo random_bites(4);
    Просто и генерировать можно значения произвольной длины.
    P.S. Подходит под PHP7, под версии периода палеолита, есть альтернативные функции.
     
    #36 t1grok, 19 июл 2017
    Последнее редактирование: 19 июл 2017
    shturman нравится это.
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    не всегда и не везде его можно юзать без опаски, что что-то текстовое по пизде пойдёт. а в вебе текстовое всё сплошь и рядом.

    вообще есть крутая штука хашидс http://hashids.org/ =)
     
    shturman нравится это.
  13. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @igordata, моя версия по-короче будет
    PHP:
    1. function get_rand_char($num)
    2. {
    3.     $x = 'xUB3dK6LPet8sRYCcEpNA5klGbou9j1DSaMZW4Fvgw7iznVhTHQIfrJXqmy2';
    4.     return mb_substr($x, ($num % 10) * 6 + rand(0, 5), 1);
    5. }
    6.  
    7. function encode_num($num)
    8. {
    9.     $num = $num % 100000000;
    10.     $s = str_pad($num, 8, "0", STR_PAD_LEFT);
    11.     $result = '';
    12.     for($i = 0; $i < 8; $i++)
    13.     {
    14.         $result .= get_rand_char(mb_substr($s, $i, 1));
    15.     }
    16.     return $result;
    17. }
    только без decode и всяких плюшек.
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.543
    Симпатии:
    623
    Карочи
    PHP:
    1. $code = "";
    2. for($i = 0; $i < 8; $i++) {
    3.   $code .= chr(mt_rand(97, 122));
    4. }
    5. echo $code;
     
    shturman нравится это.
  15. shturman

    shturman Активный пользователь

    С нами с:
    27 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    Вот это подняли тему 7 летней давности))) класс
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    а почему бы и нет?