Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Обратимая генерация уникального ID

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть число от 3-х знаков и выше, реальный ID пользователя. Надо по этому числу генерировать на PHP уникальный другой ID - назовем его CODE.  
Нужны функции, которая генерила бы на основе ID уникальный CODE и наоборот, получив CODE из него вытаскивала бы ID.  
Сейчас вот такое вот понаписано - так и не вкурю, как работает, как мы получаем последнюю цифру
 

Код:
function code_by_id ($id) {
      $num = intval($id) + 7000;
      $code = str_pad((string)$num, 5, '0', STR_PAD_LEFT);
      $byte = 0;
      for ($i = 0; $i < 5; $i++) {
         $byte += intval($code[$i]);
      }
      $code .= (string)round($byte/5);
      return $code;
  }

Тут получаем из трехзначного кода 6-значный CODE вида "07+ID+уникальное число".  
Как бы его переделать, чтобы работало с числами более трех знаков, то есть более 999 и чтобы обратное действие тоже было возможно?

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 16:39 13-05-2016 | Исправлено: xerpal, 21:03 13-05-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal
А смысл всего этого? Вы добавили слева или справа что то - уже другой код, хоть и не полностью ) хотите как то изменить цифры при этом - воспользуйтесь одновременно  битовыми операциями над числом.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 16:46 13-05-2016
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Короче зря написал, просто унифицировал функцию для любой "длины" ID и все ок, работает.  Просьба к модератору форума удалить тему.

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 18:22 13-05-2016 | Исправлено: xerpal, 18:22 13-05-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal
то, что вы делаете, лишь аналог добавления CRC суммы в конец, для проверки целостности )  
смысла не вижу, но.. вам виднее.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:25 13-05-2016
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Не я изначально делал, но функцию свою выполняет же

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 21:02 13-05-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal
насчет смысла я уже написал.. ну да ладно ) вот вам универсальный код

Код:
function code_by_id($id, $len = 5, $start = '07')
{
   $code = $start . str_pad($id, $len - strlen($start), '0', STR_PAD_LEFT);
   return $code . round(array_sum(str_split($code)) / $len);
}

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:29 13-05-2016 | Исправлено: Mavrikii, 00:57 14-05-2016
xerpal



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
$len это длина строки $id  - лишняя в итоге переменная, а так то же самое, что и делал примерно - только не так сжато, без str_split
 

Всего записей: 1584 | Зарегистр. 08-10-2011 | Отправлено: 07:06 14-05-2016 | Исправлено: xerpal, 07:16 14-05-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xerpal

Цитата:
лишняя в итоге переменная

эм.. ну я же не знаю, вдруг id изначально идет цифрой и возможные нули в начале не дадут определить нужную длину. поэтому и сделал отдельно.
 

Цитата:
а так то же самое, что и делал примерно

так я просто переписал код выше.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 07:22 14-05-2016
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Обратимая генерация уникального ID


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru