SMS QRコード作成
100%プライベート、ローカル処理 — データがブラウザの外に出ることはありません。これらのQRコードは恒久的で、期限切れになることはありません。
SMSの設定
デザイン
中央にロゴを追加
画像はこのページ内で読み込まれ、data: URLとしてコードに埋め込まれます。アップロードはされず、ダウンロードするファイルの中に留まります。
その他のデザイン設定
コードの暗いほうの半分です。背景より明度を十分低く保ってください。
モジュール同士の隙間だけでなく、クワイエットゾーンも塗ります。背景を透過にするとファイルから省かれるので、この色では何も描画されません。
モジュールと背景のコントラストは11.5:1です。
PNGとWebPはアルファチャンネルを保持し、SVGは背景の矩形をそのまま省きます。コードを置いた面が、コントラストの明るいほうの半分になります。
グラデーションは暗いモジュールだけを塗ります。明るいほうの端がスキャナーの実際に得るコントラストを決めるので、両端とも暗いままにする必要があります。
2色目で、グラデーションを選んでいる間だけ使われます。1色目と並べてコントラストが測定されます。
左から右への向きを起点とした時計回りの角度です。放射グラデーションは中心から外へ広がるため、角度が効くのは線形のときだけです。
丸い形はセルを覆う面積が小さくなります。デコーダーが標本を取る中心は覆われたままですが、密度の高いコードを小さく印刷する場合は四角のほうが安定して読み取れます。
3つの位置検出パターンの外枠です。
各位置検出パターンの中にある目にあたる部分です。
コードの周囲の余白で、モジュール単位で測ります。規格上の最小値は4です。
復元レベルが高いほど多くの損傷に耐えられますが容量を消費するため、同じ内容でもシンボルが密になります。
中央にロゴがあり、レベルをHに固定しています。幅の上限はシンボルに応じて変わり、最小のコードで14%、密なコードで30%です。
ライブプレビューと書き出し
メッセージの送り先の番号を入力してください。
書き出し
ラスター、画面向け
フォームを入力するとダウンロードが有効になります。
書き出しサイズとエンコードされたテキスト
- ペイロード
- まだ何もエンコードされていません
- シンボル
- まだ生成されていません
- 復元レベル
- M
入力待ち
SMSのQRコードは、宛先にあなたの番号を入れ、本文を書き込んだ状態でメッセージアプリを開きます。送信ボタンを押すのは相手自身であり、通信料も相手の契約どおりに相手の通信事業者から請求されます。
スキャンしたときの動作
スマートフォンがメッセージアプリを開いて番号と下書き本文を入力した状態にし、送信は本人がタップして行います。
sms:ではなくSMSTO:を使う理由
ここで書き出されるペイロードは SMSTO:+819012345678:BOOTH14 価格表を送ってください です。番号は1つ目と2つ目のコロンの間に入り、本文は文字列の最後まで続きます。この構文はZXingというバーコードプロジェクトに由来し、背後にRFCはありません。最も広い範囲のスキャナーアプリが読み書きする書き方だったため、一般的な選択になりました。
正式に仕様化された代替は、RFC 5724のsms: URIで、sms:番号?body=本文 と書きます。こちらは本物の標準ですが、ここで問題になるまさにその部分で実装が食い違います。bodyパラメータと複数宛先の扱いがiOSとAndroidで異なるため、sms:で作ったコードは片方のプラットフォームで動き、もう片方では空の下書きを生みます。
接頭辞のあとの最初のコロンだけが区切りです。読み取り側はそこまでを番号、そのあとすべてを本文として扱うので、本文の中のコロンやセミコロンは入力したとおりに通り、エスケープは要りません。むしろエスケープするほうが悪い結果になります。アンエスケープしない読み取り側は、下書きに目に見えるバックスラッシュを入れてしまうからです。番号の側も区切りを壊せません。書き出す前に、プラス記号と数字だけに整理されるからです。
番号を正しく書く
番号はE.164形式で書きます。先頭にプラス、国番号、そのあとに加入者番号だけを続け、ほかは何も入れません。090-1234-5678 と印刷される日本の携帯番号は +819012345678 になり、国番号のあとの国内プレフィックスの0を落とします。空白、括弧、ハイフンはエンコード前に取り除かれますが、先頭の0は生成ツールが推測できるものではないので、入力の時点で外す必要があります。
プラス記号は見た目以上に重要です。これがないと端末は数字を国内番号として扱い、SIMが登録されている国に対して発信するため、京都の店のために印刷したコードが、その目の前に立っているドイツのSIMの訪問者では機能しません。
5桁・6桁の短縮番号は別の仕組みです。国ごと、通信事業者ごとに割り当てられ、国番号を取らず、海外のネットワークからは到達できません。印刷する場合は、それを提供している事業者の国内契約者にしか使えないものと考えてください。
本文の長さ、エンコード、料金
1つのSMSセグメントは、本文がGSM 7ビットのアルファベットに収まる場合、160文字を保持します。そのアルファベットの外の文字が1つでも入るとメッセージ全体がUCS-2に切り替わり、上限は1セグメントあたり70文字に下がります。絵文字は必ずこの切り替えを起こします。長い本文は分割されて再結合され、送信者はセグメントごとに課金されます。
QRコードの中でも、同じ文字が二重に高くつきます。ASCIIの外はUTF-8としてバイトモードに格納されるため、アクセント付きの語や絵文字は1文字あたり2〜4バイトを使い、シンボルを1バージョン押し上げます。
事前入力のSMSの狙いは、たいてい短い合言葉です。届くのは普通の番号からの普通のテキストなので、それを残すか書き換えるかは送信者次第で、配信確認はなく、そもそも送ってくれる保証もありません。
よくある質問
メッセージは勝手に送信されますか?
いいえ。スキャンでできるのは、メッセージアプリで下書きを開くことだけです。宛先の番号と本文が入力された状態になり、その人が読み、編集または削除して、送信を押します。押すまで、端末から何も出ていきません。
なぜ標準のsms:ではなくSMSTO:を使うのですか?
SMSTO:にRFCはありませんが、スキャナーアプリが最も一貫して読み取る構文です。RFC 5724のsms: URIはきちんと仕様化されているものの、bodyパラメータと複数宛先の扱いでiOSとAndroidが食い違うため、その書き方の本文は片方のプラットフォームで空のまま届くことがあります。
5桁の短縮番号は使えますか?
エンコードはできますが、その短縮番号が提供されている国と通信事業者の契約者にしか動きません。短縮番号は国番号を取らず海外からは到達できないため、外国のSIMを持つ訪問者には、役に立つエラーではなく送信の失敗が返ります。
事前入力の本文に絵文字は使えますか?
使えますが、2つの代償があります。通信事業者側では絵文字がメッセージ全体をUCS-2に切り替え、1セグメントが160文字から70文字に減ります。QRコードの中では絵文字1つがペイロードの4バイトを占めるため、いくつか入れるだけでシンボルが1バージョン上がることがあります。
静的QRコードの仕組み
このサイトのコードはすべて静的です。ペイロードは白黒のモジュールそのものに書き込まれています。読み取り時に何かを参照することはなく、当サイトのサーバーが関与することもなく、印刷されたコードをサブスクリプションが支えているわけでもありません。同じ性質が限界でもあります。一度印刷すると、中身は変更できません。
印刷したコードが読めるかどうかを決めるのは3つです。ペイロードが何バイトになったか、どの復元レベルが損傷を吸収するか、そして紙の上で1モジュールがどれだけの幅になるか。以下のガイドは、そのそれぞれを数字とともに扱います。