FixQR
What is a QR code
A QR code is a square pattern that stores text a phone can read. The name stands for Quick Response. It was made so a camera could read a printed mark quickly, even when the mark is turned. The camera does not see a picture of a web page. It sees a grid of dark and light squares, and the phone turns that grid back into text.
Most of the time, that text is a web address, and the phone offers to open it. The code holds the address. It does not hold the page. If the page at that address changes, the same code still opens that address and shows whatever is there now. If the address is removed, the pattern can still be valid and the page can still be missing.
The code in the picture stores https://fixqr.app. These are the three parts a camera uses.
- Finder pattern. Three large corner squares. They show where the code is and which way is up. One corner is left open so a turned code can still be read.
- Modules. The small squares store the address or other text, plus extra squares used when part of the code is damaged.
- Quiet zone. The empty margin around the pattern. A border that touches the squares makes the code hard to find.
The three corner squares
The large squares in three corners are finder patterns. Each one is seven modules across: a dark frame, a light ring, and a dark center. That shape stands out on a page, so the camera can find it. The three squares tell the phone that this mark is a QR code, where it sits, and how it is turned.
One corner is left open on purpose. It has no large finder square. That missing square tells the phone which way is up. A code turned sideways or upside down can still be read, because the open corner moves with the code and the text stays in the right order.
A square that only copies those corners, with a made-up pattern in the middle, is not a QR code. Nothing is stored there for a phone to recover. That is what happens with many codes drawn by an image tool.
The alternating line
A row and a column of alternating dark and light modules run between the corner squares. That line is the timing pattern. It gives the camera a ruler, so the grid stays straight and each sample lands on a module.
This code also has one smaller square inside the pattern, toward the open corner. It is five modules across. That is an alignment pattern. It helps when the surface is curved or the camera is off to the side. It is not a fourth finder square. On bigger codes, more than one of these squares can appear. The three corners still show where the code is.
The grid in the picture is version 2. Version is the size step. Version 1 is 21 modules on a side. Each step up adds four modules on each side. Version 2 is 25 modules on a side.
The small squares
The rest of the grid is modules. Each module is dark or light. Together they hold the text. A short address makes a small code. A long address needs more modules, so the squares get smaller if the printed size stays the same. The code then has to be printed larger to stay readable.
After the text is placed, a mask flips some squares. The flip breaks up a large empty patch, and it breaks up clumps that could look like another corner. Size, contrast, and blur are covered in why QR codes are hard to scan.
How much text fits
What the text is changes how much fits. Digits pack tighter than letters and symbols. A code that stores only numbers can hold more characters than a code that stores a web address.
The largest QR code is version 40. At error correction L, the lowest level, it holds 7,089 digits, or 2,953 characters of text stored one byte per character. A normal web address is stored that way. Those are the limits of that huge code. A flyer uses a much smaller grid. The address in the picture, https://fixqr.app, is 17 characters. At error correction M, the smallest grid that holds it is version 2.
Extra modules for damage
Some modules are not the message. They are error correction, mixed through the grid. They let a phone rebuild the text when a small part of the code is dirty, torn, or covered.
There are four levels, labeled L, M, Q, and H. L can rebuild about 7 percent of the data. M can rebuild about 15 percent. Q can rebuild about 25 percent. H can rebuild about 30 percent. Higher correction uses more modules, so the code gets denser. The code in the picture uses M.
A logo in the center spends that spare capacity. It works only when the rest of the pattern is intact and the code is large enough for the remaining squares to be read. A logo that covers a corner square, or a logo on a tiny code, leaves the phone without a pattern it can rebuild.
The empty margin
The blank space around the pattern is the quiet zone. The standard margin is four modules on each side, the width of four small squares. The picture above has that margin. The camera uses the blank to tell the code apart from a border, a line of type, or a photograph.
A border that touches the pattern makes the code hard to find. The finder squares can be intact, and the phone can still fail to see where the code starts. The margin should match the light modules, usually white.
What people put in one
A web address is the usual choice. A code can also hold plain text, a phone number, an email address, the name and password for a Wi-Fi network, or a short contact card. A short contact card can be stored as a vCard, which is plain text in a contact format. A long card, or a card with a photo, makes a dense code, and it may not fit in a small one.
The code holds that text. It does not hold the page, the inbox, the contact list, or the network. The phone reads the text and offers the next step. It does not dial, send mail, or join the Wi-Fi until the person confirms.
Some codes store a short redirect address instead of the final page. The squares still hold only that address. The page the redirect points to can change later. The printed pattern does not.
How a phone reads it
The camera looks for the three corner squares. Once it has them, it uses the alternating line to lay a grid over the pattern and samples each module. A short run of modules beside the corners records the error correction level and the mask. It is written twice. If one copy is damaged, the other can still be read.
The phone checks that the pattern is a real code, repairs damage the extra modules can cover, and turns the modules into text. If the squares are too small, too faint, blurred, or missing their margin, the phone stops. It does not guess the address. Opening a page, placing a call, or joining a network comes after that, and the person confirms it.
It is not a barcode
A barcode is a row of lines. It usually holds a short number, such as a product code, and it is often read by a scanner at a checkout. A QR code is a grid, made for a camera, and it can hold a full web address. A barcode is read along one direction. A QR code is read across rows and columns, which is why a longer text fits.
They are both machine-readable marks. They are not the same pattern, and a phone that is looking for one will not treat the other as a substitute.
Dark modules on a light background
Use dark modules on a light background. Make the code large enough for the distance people will scan from. Leave the blank margin clear. When the squares are faint, crowded, or too small, the details are in why QR codes are hard to scan.
Putting one on a design you already have
You do not have to rebuild a flyer to add a code. FixQR places a real QR code on a finished picture, or it covers a mark that will not scan. You set the destination, place the code, and FixQR reads the finished picture before download. Download stays off until the picture decodes to the destination you set. The picture stays in the browser. There is no account and no payment.