Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: нужна взаимообратная функция
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
ну в общем то имеем магазинчик
когда производят заказ хотелось бы клиенту возвращать номер заказа
но вот возвращать чистый id заказа очень не хочется
ибо в данном случае есть возможность мониторинга из вне число заказов в магазине, а это плохо!
так вот может кто подскажет взаимообратную функцию (надо же еще и по номеру заказа доступ к нему получить) формирующая 5-7 циферный набор символов.
EuGen
Отправлено: 21 Октября, 2011 - 09:49:19
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DlTA пишет:
ибо в данном случае есть возможность мониторинга из вне число заказов в магазине, а это плохо!
Так как взаимообратная функция отобразит множество значений id в равномощное множество своих значений, то проследить количество можно будет все равно.
Если нужна криптостойкая функция, используйте стандартные алгоритмы шифрования.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DlTA
Отправлено: 21 Октября, 2011 - 10:20:25
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
EuGen пишет:
проследить количество можно будет все равно.
я таки надеюсь на фукцию позволяющая получить такие значение
что для рядового пользователя данная работа будет не под силу
а те кто поумнее, подозреваю пойдут другим путем, нацеливаясь уже на саму базу сайта
EuGen
Отправлено: 21 Октября, 2011 - 10:23:48
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Так нет, Вы поймите - если Вам нужно скрыть именно число заказов, то идея неверная.
Приведу пример.
Предположим, что у Вас есть множество значение id от 1 до 10:
1,2,3,4,5,6,7,8,9,10
(то есть мощность этого множества и равна 10), а взаимообратная функция просто умножает на 100 (то есть обратная к ней будет делить на 100), превращая id в ненастоящие.
Но тем не менее у Вас будет множество
100, 200, 300,400,500,600,700,800,900,1000
- очевидно, число его элементов от применения такой функции не изменится.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
LIME
Отправлено: 21 Октября, 2011 - 10:36:31
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
d1d2d3d4d5 -id
например результат- d1d2d3x5d4x3d5(x4+5)
где x[$i]=d[$i]
если последняя цифра меньше 5 значит после сложения прибавился разряд
придумано навскидку (Добавление)
хотя лучше сменить нумерацию на "с конца"
чтобы при увеличении разряда id алгоритм не менялся (Добавление)
и вопрос
есть ли какие-то стандартные алгоритмы в пхп чтоб из d только d получались
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
EuGen пишет:
1,2,3,4,5,6,7,8,9,10
(то есть мощность этого множества и равна 10), а взаимообратная функция просто умножает на 100 (то есть обратная к ней будет делать на 100), превращая id в ненастоящие.
Но тем не менее у Вас будет множество
100, 200, 300,400,500,600,700,800,900,1000
спасиб за ткание носом
можно воспольоваться функцией шифрование с открытым ключем
вот пример работы:
подозреваю что скажите "ересть, вскрывается на ура"
да, вполне возможно, но с другой стороны, любой замок это прежде всего расчет на то что злоумышленник не знает его внутренних параметров.
LIME
Отправлено: 21 Октября, 2011 - 10:58:39
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
DlTA неа
тут используется рандом
а значит если во второй раз открыть заказ вы не сможете вывести тот же номер
нельзя же на куки уповать
DlTA
Отправлено: 21 Октября, 2011 - 11:05:58
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
LIME пишет:
неа
тут используется рандом
а значит если во второй раз открыть заказ вы не сможете вывести тот же номер
так к кто сказал что надо при каждом открытии заказа генерить заново
суть вопроса в том чтоб клиенту пересылать крассивый номер
а в нутри сайта привязка к id заказа
кстати сам номер можно сохранять как еще одно поле заказа
LIME
Отправлено: 21 Октября, 2011 - 11:13:28
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
DlTA пишет:
кстати сам номер можно сохранять как еще одно поле заказа
не кажется что в этом случае таблица будет избыточной?
тогда есть смысл убирать нафиг id и работать с генерированным полем как с первичным ключем )) (Добавление)
+ это еще 1 защита от коллизий
если такой ключ уже сгенерен то генерить еще раз (Добавление)
DlTA пишет:
кто подскажет взаимообратную функцию
ктомуже так было спрошено ))
EuGen
Отправлено: 21 Октября, 2011 - 11:27:56
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Можно обернуть все в класс и скрыть там значение применяемой маски ($x). Числом разрядов маски можно регулировать длину получающегося значения.
В данном случае функция является обратной сама к себе (и таким образом определение второй функции сделано только для наглядности, она в принципе не обязательна)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Stierus
Отправлено: 21 Октября, 2011 - 12:28:56
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
обычно в базе данных есть отдельное поле "номер заказа", не равный автоинкрементальному полю.
Если не катит добавить 1 поле в бд - попробуйте сделать автозамену - приводите id к двоичному виду, сдвигайте, приводите к шестнадцатеричному, заменяйте E на А, С на F, например и тд ... заменили 2 символа - в конце добавляете 2xy, где x и y - позиции замененных цифр, после этого конвертите в десятичную форму ... если такую муть кто-то будет расшифровывать - то вам явно надо переходить к доп. полю в бд, ибо ваш бизнес крайне велик и привлекателен для жуликов
да, еще 1 шикарнейший способ - не требует нового поля, основан на бд - вычисляйте номер заказа за день . Выбираете, какой он по счету в выборке, отсортированной по дате создания(заказа), отфильтрованных на сегодня. если не хотитепоказывать количество заказов за день - выбирайте за месяц и домножайте на 123 ... в любом случае, человеку, не знающему схемы работы, эти цифры не будут говорить ни о чем
DlTA
Отправлено: 21 Октября, 2011 - 12:45:31
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
в общем суть понятна
для получения реально красивого числа
нужно работать не только как с числом но добавлять хитрую строковую обработку
всем спасибо
DlTA
Отправлено: 21 Октября, 2011 - 15:54:06
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
а как строчку типа "011011010101" преобразовать в десятичное значение??
EuGen
Отправлено: 21 Октября, 2011 - 15:56:41
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.