- PVSM.RU - https://www.pvsm.ru -
Многое было сказано о форматах самих qr-кодов, но не менее важно то, что кодирует сам штрих-код. Как правило, qr-коды кодируют какой-то текст, однако этот текст может содержать различные команды для сканера, которые, например, сообщают ему, что закодированный текст — это ссылка и что ее необходимо открыть в браузере.
В qr-коды можно закодировать самый различный текст с указаниями для сканера, как этот текст интерпретировать и какую информацию показать пользователю. Например, в qr-код можно закодировать контактную информацию с командой добавить ее в контакты телефона. Однако, чтобы каждый сканер мог понять, какой тип информации и какие команды зашифрованы, нужны стандарты.
В этой статье будут рассмотрены некоторые из этих стандартов и описаны возможные типы данных, которые можно спрятать в qr-код.
Все примеры были протестированы с помощью сканера в IOS 14 и the-qrcode-generator.com [1]
Наиболее распространенным применение qr-кода — это кодирование ссылок. Для этого просто закодируйте текст ссылки в qr-код. Добавьте протокол https://
в начало ссылки, чтобы убедиться, что сканер распознает текст именно как ссылку.
Пример qr-кода с ссылкой
В дикой природе встречается префикс urlto:
. Кодируемый текст тогда выглядит, как urlto:habr.com
. Однако данный формат поддерживается не всеми современными сканерами (например, не работает во встроенном в IOS 14)
Чтобы закодировать адрес электронной почты, например info@habr.com
. Нужно дополнить адрес до ссылки ( подробнее про URI scheme [2] ), которая будет распознана, как команда открыть приложение почты: mailto:info@habr.com.
Добавляя параметры к ссылке, можно указать тему письма, его содержание и многое другое. Стандарт mailto
RFC 6068 [3] является частью интернет стандартов IETF [4].
Поэкспериментировав, можно понять, что умный сканер в IOS 14 распознает просто закодированный email и предлагает написать на него письмо. Однако, чтобы указать другие параметры, уже потребуется mailto:
префикс.
# Только адрес получателя (распознается как почта в сканере IOS 14) someone@habr.com # С использованием mailto схемы mailto:someone@habr.com # Адрес и тема письма mailto:someone@habr.com?subject=Hello%20from%20Habr # Получатель, сс: копия, bcc: скрытая копия и тема письма mailto:someone@habr.com?cc=someoneelse@habr.com,another@habr.com,me@habr.com&bcc=lastperson@habr.com&subject=Big%20News # Адрес, CC, BCC, тема и текст письма mailto:someone@habr.com?cc=someoneelse@habr.com,another@habr.com,me@habr.com&bcc=lastperson@habr.com&subject=Big%20News&body=QR-code%20are%20cool.
Важно заметить, что любые небуквенные символы в ссылках нужно переводить в специальный формат [5].
Чтобы закодировать номер телефона, нужно использовать tel
url-схему. Чтобы гарантировать правильность распознавания номера, лучше указывать полную версию номер (например, код страны + код города + номер).
Как и с адресом электронной почты, просто закодированный номер телефона распознается в сканере IOS 14.
# Только номер +78005553535 # Tel url-схема tel:+78005553535
Для передачи контакта существует несколько форматов:
Этот формат похож на предыдущие, но уже не является ссылкой.
MECARD:N:Owen,Sean;ADR:76 9th Avenue, 4th Floor, New York, NY 10011;TEL:12125551212;EMAIL:email@example.com;;
Вначале идет префикс с указанием формата MECARD
, после двоеточие через точку с запятой перечисляются параметры в формате {ключ}:{значение}
. В конец добавляется еще одна точка с запятой.
BIZCARD (документации по этому стандарту я не смог найти)
BIZCARD:N:Sean;X:Owen;T:Software Engineer;C:Google;A:76 9th Avenue, New York, NY 10011;B:+12125551212;E:email@google.com;;
Синтаксис похож на предыдущий формат
vCard [7]
Большинство устройств поддерживают этот формат. Однако у него существует несколько различных версий, отличающихся набором допустимых параметров.
BEGIN:VCARD N:Smith;John; TEL;TYPE=work,VOICE:(111) 555-1212 TEL;TYPE=home,VOICE:(404) 386-1017 TEL;TYPE=fax:(866) 408-1212 EMAIL:smith.j@smithdesigns.com ORG:Smith Designs LLC TITLE:Lead Designer ADR;TYPE=WORK,PREF:;;151 Moore Avenue;Grand Rapids;MI;49503;United States of America URL:https://www.smithdesigns.com VERSION:3.0 END:VCARD
Некоторые из доступных параметров описаны в таблице ниже.
Ключ |
Тип |
Description |
Format |
BEGIN |
Обязательный |
Все vCards должный начинаться с этого параметра |
BEGIN:VCARD |
N |
Опциональный |
Полное имя |
N:Smith;John; |
TEL;TYPE |
Опциональный |
Номера телефонов и их типы |
TEL;TYPE=work,VOICE:(111) 555-1212 TEL;TYPE=home,VOICE:(404) 386-1017 TEL;TYPE=fax:(866) 408-1212 |
|
Опциональный |
Адрес электронной почты |
EMAIL:smith.j@smithdesigns.com |
ORG |
Опциональный |
Название компании |
ORG:Smith Designs LLC |
TITLE |
Опциональный |
Должность |
TITLE:Lead Designer |
ADR; TYPE |
Опциональный |
Домашний и рабочий адреса в формате: Street; City; State; Postal Code; Country |
ADR;TYPE=WORK,PREF:;;151 Moore Avenue;Grand Rapids;MI;49503;United States of America |
URL |
Опциональный |
Веб-сайт |
URL:https://www.smithdesigns.com |
VERSION |
Обязательный |
Версия vCard |
VERSION:3.0 |
END |
Обязательный |
Закрывающий параметр |
END:VCARD |
Для отправки смс существует формат [8] со url-схемой sms:
, похожей на отправку email.
# Отправить смс на номер sms:+15105550101 # Отправить определенный текст smsto:+15105550101:hello there
Формат smsto:
является аналогом sms:
, но только с помощью него мне удалось передать текст сообщения (все тесты проводились на IOS 14).
В документации IOS есть информация [9] о url-схемах для доступа к звонкам FaceTime
Пример qr-кода с вывозом FaceTime
# FaceTime видео-звонок facetime:+18005551212 facetime:me@icloud.com # FaceTime аудио-звонок facetime-audio:+18005551212 facetime-audio:me@icloud.com
Для передачи точки на карте используется geo:
url — схема. Через запятую перечисляются широта, долгота и опционально высота над уровнем моря (в метрах).
# Координаты geo:40.71872,-73.98905 # Координаты + высота geo:40.71872,-73.98905,100
Однако более современным способом являются простые ссылки, генерируемые самим приложением Карты. В этом случае доступно больше параметров.
# Apple maps https://maps.apple.com/place?address=400%20Broad%20St,%20Seattle,%20WA%20%2098109,%20United%20States&auid=17457489312301189071&ll=47.620521,-122.349293&lsp=9902&q=Space%20Needle # Google maps https://maps.google.com/?address=400%20Broad%20St,%20Seattle,%20WA%20%2098109,%20United%20States&auid=17457489312301189071&ll=47.620521,-122.349293&lsp=9902&q=Space%20Needle
iCalendar [10] формат используется для хранения календарей. Компонент vEvents [11] отвечает за хранения событий, он и используется для кодирования в qr-код.
BEGIN:VEVENT UID:19970901T130000Z-123401@example.com DTSTAMP:19970901T130000Z DTSTART:19970903T163000Z DTEND:19970903T190000Z SUMMARY:Annual Employee Review CLASS:PRIVATE CATEGORIES:BUSINESS,HUMAN RESOURCES END:VEVENT
После сканирование такого qr-кода устройство (Android, iOS 11+) предложит подключиться к сети.
Пример qr-кода для подключения к WiFi
WIFI:T:WPA;S:mynetwork;P:mypass;;
Другие параметры приведены в таблице ниже
Ключ |
Пример |
Описание |
---|---|---|
|
|
Тип аутентификации; может быть |
|
|
Название сети SSID. Обязательный параметр. Если строка может быть интерпретирована как шестнадцатеричное число, нужно заключить ее в двойные кавычки. |
|
|
Пароль. Параметр игнорируется, если |
|
|
Необязательный параметр. Значение |
|
|
(WPA2-EAP) EAP method, например |
|
|
(WPA2-EAP) Anonymous identity |
|
|
(WPA2-EAP) Identity |
|
|
(WPA2-EAP) Phase 2 method, например |
Недавно в рамках статьи про создания телеграм ботов [12], я сделал бота для генерации WiFi qr-кодов [13]. Можете воспользоваться им, чтобы без труда создать WiFi qr-код и больше не мучиться с перепечатыванием длинных паролей.
У телеграма есть своя url-схема, которая позволяет делиться ссылками.
# Простая ссылка https://t.me/share/url?url={url}&text={text} https://telegram.me/share/url?url={url}&text={text} # Команда для приложения tg://msg_url?url={url}&text={text}
Подробнее про возможности «поделиться через телеграм» можно почитать в документации [14].
Многие приложения имеют url-схемы, которые дают возможность обращаться к ним по ссылкам. Эти ссылки, в свою очередь, можно спрятать в qr-коды. Однако для некоторых типов данных были разработаны собственные текстовые форматы, которые подходят для сохранения в qr-коды.
RFC 6068 [3] — The mailto
URI Scheme
RFC 5724 [8] — URI Scheme for Global System for Mobile Communications (GSM) & Short Message Service (SMS)
Автор: Владимир
Источник [26]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/standarty/364067
Ссылки в тексте:
[1] the-qrcode-generator.com : https://www.the-qrcode-generator.com
[2] подробнее про URI scheme: https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax
[3] RFC 6068: https://tools.ietf.org/html/rfc6068
[4] частью интернет стандартов IETF: https://en.wikipedia.org/wiki/Internet_Standard
[5] специальный формат: https://en.wikipedia.org/wiki/Percent-encoding
[6] NTT DoCoMo MECARD: https://web.archive.org/web/20130712164414/http://www.nttdocomo.co.jp:80/english/service/developer/make/content/barcode/function/application/addressbook/
[7] vCard: https://en.wikipedia.org/wiki/VCard
[8] формат: https://tools.ietf.org/html/rfc5724
[9] информация : https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/FacetimeLinks/FacetimeLinks.html#//apple_ref/doc/uid/TP40007899-CH2-SW1
[10] iCalendar: https://en.wikipedia.org/wiki/ICalendar
[11] vEvents: https://icalendar.org/iCalendar-RFC-5545/3-6-1-event-component.html
[12] статьи про создания телеграм ботов: https://habr.com/ru/post/549178/
[13] бота для генерации WiFi qr-кодов: https://t.me/wifi_qr_bot
[14] документации: https://core.telegram.org/widgets/share#custom-buttons
[15] CSS-Tricks: Mailto Links: https://css-tricks.com/snippets/html/mailto-links/
[16] Apple URL Scheme Reference: Mail Links: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MailLinks/MailLinks.html#//apple_ref/doc/uid/TP40007899-CH4-SW1
[17] Android: Common Intents: Mail Links: https://developer.android.com/guide/components/intents-common#Email
[18] CSS-Tricks: The Current State of Telephone Links: https://css-tricks.com/the-current-state-of-telephone-links/
[19] Apple URL Scheme Reference: Phone Links: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/PhoneLinks/PhoneLinks.html
[20] Android: Common Intents: Phone Links: https://developer.android.com/guide/components/intents-common#Phone
[21] CSS-Tricks: iPhone Calling and Texting Links: https://css-tricks.com/snippets/html/iphone-calling-and-texting-links/
[22] Apple URL Scheme Reference: SMS Links: https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html#//apple_ref/doc/uid/TP40007899-CH7-SW1
[23] Android: Common Intents: SMS Links: https://developer.android.com/guide/components/intents-common#Messaging
[24] Маклауд: https://macloud.ru/?partner=4189mjxpzx
[25] Image: https://macloud.ru/?partner=4189mjxpzx&utm_source=habr&utm_medium=original&utm_campaign=chernyx
[26] Источник: https://habr.com/ru/post/556452/?utm_source=habrahabr&utm_medium=rss&utm_campaign=556452
Нажмите здесь для печати.