Тот же URL-адрес, другой QR-код — что лучше?

Я использовал несколько различных онлайн-сайтов-генераторов QR-кодов для создания статических QR-кодов (я никогда не делаю динамических — мне не нужны никакие их «функции», и я не хочу, чтобы они отслеживали моих посетителей). Недавно я заметил, что в зависимости от того, какой сайт я использую, результирующий код немного отличается, и мне интересно, почему. Я не знаю, как анализировать исходные данные, но предполагаю, что существует разница в контрольных суммах или других методах исправления ошибок. Есть ли способ узнать, что будет более читабельным?

Например, используя URL-адрес «https://japan.deafmin.org», три сайта отображали его следующим образом, все с одинаковым количеством квадратов (в отличие от другого инструмента, который я пробовал, который использовал гораздо больше квадратов, хотя я отклонил все варианты - кажется подозрительным!) но по другой схеме. Генераторы были (слева направо) : https://www.qr-code-generator.com , https://www.qrcode-monkey.com и https://www.the-qrcode-generator.com . Первые два сайта даже принадлежат одной компании, но коды у них все равно разные.

Кто-нибудь знает, какие характеристики могут измениться, даже если код теоретически представляет собой одну и ту же строку символов?

ОБНОВЛЕНИЕ: Узнав пару подсказок, я еще больше озадачен. Вот две подсказки:

  • Согласно https://www.qrcode-tiger.com/qr-code-error-correction , уровень исправления ошибок (L, M, Q или H) обозначается самым левым битом данных в нижней строке и тот, что над ним.
  • Комментарий под ответом здесь указал мне на https://zxing.org/w/decode.jspx , где приведены необработанные фрагменты кода.

Но это меня еще больше сбивает с толку. Теоретически, коды №1 и №3 в моих примерах используют уровень исправления ошибок L (7%), а №2 – M (15%). Но вот байты, декодированные ZXing:

      #1 qr-code-generator
71 a4 19 68 74 74 70 73   3a 2f 2f 6a 61 70 61 6e
2e 64 65 61 66 6d 69 6e   2e 6f 72 67 00 ec 11 ec
11 ec

#2 qr-code-monkey
41 96 87 47 47 07 33 a2   f2 f6 a6 17 06 16 e2 e6
46 56 16 66 d6 96 e2 e6   f7 26 70 ec

#3 the-qr-code-generator
41 96 87 47 47 07 33 a2   f2 f6 a6 17 06 16 e2 e6
46 56 16 66 d6 96 e2 e6   f7 26 70 ec 11 ec 11 ec
11 ec

#1 содержит точные байты URL-адреса (68 74 74 70 73 3A 2F 2F 6A 61 70 61 6E 2E 64 65 61 66 6D 69 6E 2E 6F 72 67) всего несколькими байтами до и после. №2 и №3 совершенно разные, но похожи друг на друга. Одна из загадок заключается в том, что, хотя номер 2 предположительно имеет больше всего исправлений ошибок, в нем меньше всего байтов — как такое может быть? И весь набор данных #2 является подмножеством #3 (за которым в #3 следует только11 ec 11 ec 11 ec), так что они очень похожи, но узоры квадратов совершенно разные, да?

1 ответ

Конечно, QR-коды содержат данные для исправления ошибок. Различные уровни исправления ошибок добавляют больше или меньше данных в зависимости от уровня. Вероятно, в этом причина. Очевидно, что дополнительное исправление ошибок может привести к увеличению размера QR-кода, если URL-адрес достаточно длинный. Поэтому некоторые сайты масштабируют исправление ошибок по мере приближения к объему данных, который может поместиться в QR-код такого размера.

Следующий вариант заключается в том, что QR-коды поддерживают несколько кодировок символов. Поэтому необходимо указать, какая кодировка используется. Глядя на спецификацию, ISO-8859-1 является «по умолчанию», но в некоторых новых документах говорится, что по умолчанию должен использоваться UTF-8. Поскольку вам нужно указать, какая кодировка происходит, это изменит QR-код.

Вот несколько ссылок для дальнейшего чтения:

https://4js.com/online_documentation/fjs-gst-2.50.02-manual-html/c_grd_barcodes_qr_code.html

https://www.qrcode.com/en/about/

Другие вопросы по тегам