LogoTools
Runs entirely in your browser - nothing is uploaded

An SMS QR code holds a phone number and, optionally, the words of a text message. Scan it and the phone opens its messaging app with the number in the To field and the message already typed. The person reads it, changes it if they like, and taps send.

This tool builds that code in your browser. The number and message go into the image you download and nowhere else. Nothing is sent to a server, and the page keeps no record of it.

What the code contains

The string follows the SMSTO: convention: SMSTO, then the number, then the message, separated by colons. It was defined by the ZXing barcode project and is the form both iOS and Android camera apps open in the messaging app with everything filled in. The older sms: form from RFC 5724 is handled less consistently, so this tool does not use it.

The message is written into the code as you typed it, with only the surrounding whitespace trimmed. Leave it blank and the code holds the number alone, so the person starts with an empty message. The panel under the preview shows the exact string, so you can confirm nothing was added.

Which numbers are accepted

The number field takes 4 to 15 digits, optionally starting with a plus sign. Spaces, brackets, dots and dashes are removed, so +91 98765-43210 is encoded as +919876543210. Letters or anything shorter are rejected with the message: A phone number should be digits, optionally starting with +.

Include the country code whenever a visitor from abroad might scan the code. A local number is stored exactly as typed, leading zero included, and only reaches the right phone from inside the same country.

Writing the pre-filled message

The message is where an SMS code does its work. A keyword and a reference, such as JOIN 4821, lets you tell a shop-counter scan from a leaflet scan without any tracking service. A full sentence, such as Hi, I would like to book a table for, lets the person add a number and send without composing anything.

Keep it short. Every character adds modules to the code, and a paragraph of text produces a dense code that struggles at small print sizes. Remember too that the person can edit the text before sending, so treat it as a suggestion, not a form.

Printing and using it

SMS codes suit places where a call would be awkward and a website is too much: a bus shelter for a service alert sign-up, a competition entry on packaging, a maintenance request sticker in a lift, a feedback prompt at a counter. Standard message charges apply to the person sending, so say so on the sign where that matters.

Download the SVG for print; it scales to any size without blurring. Keep the quiet zone at two modules or more, keep dark modules on a light background, and scan the printed version with a phone from a metre away before ordering a run of them.

Frequently asked questions

Does the message send automatically when scanned?

No. Scanning opens the messaging app with the number and text filled in. Nothing goes anywhere until the person taps send, and they can change or delete the text first.

Can I leave the message blank?

Yes. The code then holds only the number, and the messaging app opens with an empty message ready to write.

Can I use a short code like 56677?

The encoder accepts it, since it takes any 4 to 15 digits. Whether the messaging app and the network route a short code opened from a QR scan the same way as a typed one depends on the carrier, so test it on a real phone before printing.

Is my number or message sent anywhere?

No. The code is generated inside your browser, and the number and message are only placed into the image file you download. There is no upload, no account and no history kept on this page.

Will it work on both iPhone and Android?

Yes. Both camera apps recognise the SMSTO: form and open the messaging app with the number and text in place. On an iPhone that is the Messages app; on Android it is whichever app handles texts on that phone.

Can the message include line breaks?

Yes. Line breaks you type in the message box are kept inside the code. Whether the messaging app preserves them or joins the lines is up to that app, so keep to a single line when the layout matters.