Задать вопрос
@easycode
не боюсь задавать глупые вопросы ))

Как закодировать 5-6 значное число в 3х символьную буквенно-числовую последовательность и с обратным декодированием?

Есть QR-коды c закодированным URL:
https://domen/XXXXXX
XXXXXX - числа: 56789, 89567, 129087 и т.д.

хочется закодировать эти 5-6 значные числа в буквенно-числовую последовательность не длиннее 3 символов, т.е. чтобы к примеру из
4f9 получать 56789
а из kh9 например 129087

таким образом решив сразу две задачи:
- уменьшение длины кодируемой в QR-коде строки (чтобы QR-код лучше читался при маленьких размерах)
- скрытие чисел XXXXXX алгоритмом сжатия аля шифрования )))

Есть что-нибудь такое в PHP ? Или как придумать какую-нибудь свою такую функцию (алгоритм) чтобы можно было кодировать и раскодировать эти числа?
  • Вопрос задан
  • 281 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 5
Fragster
@Fragster
помогло? отметь решением!
Вот тут алгоритм: https://programforyou.ru/calculators/number-systems
Согласно https://www.ietf.org/rfc/rfc3986.txt можно использовать символы 0-9, a-z, A-Z - . _ ~, т.е. получаем 66 знаков, или 287496 значений для трехсимвольной строки, что недостаточно для всех 6значных чисел, а вот все 5значные вполне уместятся.
Ответ написан
Комментировать
@pantsarny
Дополню ответы выше
, можно хранить существующие строки из символов и назначать им цифровые идентификаторы
Например
1: hsgeiV
2: jsksGs
И так далее
Хранить это в бд или файле и при запросе искать пару
На все варианты вам не хватит трехсимвольной строки, вы можете удалять старые неактуальные кода или расширить диапазон
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
base64 не рассматривали?
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Ну, три символа - это вы "очень много кушать", а 4 - без проблем
php.net/base_convert
Ответ написан
Комментировать
GavriKos
@GavriKos
999 999 в 36 ричной системе дает 4 символа с латиницей. Единственное - расширить алфавит, и расширить основание системы. Т.е. смотрите в сторону систем исчисления с большим основанием (64 например точно хватит)

https://calculatori.ru/perevod-chisel.html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы