Generate QR codes and check each one scans by decoding it back before you download it
Initializing in your browser…
Generate linear barcodes with the quiet zone each standard requires, and read the bars back to check they are right
Scan QR codes from images or using your camera. Supports URLs, WiFi, contacts, emails, phone numbers, and more. 100% offline - no data uploaded.
Percent-encode and decode against four character sets, build query strings, and take a URL apart
You need a QR code on a printed flyer that points to your signup page and still scans after being photocopied.
Encoded content
https://example.com/signup?ref=flyer
Result, with the numbers the tool reports
33 x 33 modules at level Q, 4 module quiet zone 7 pixels a module, so the canvas is 287px not 300px Decoded back at 287px and again at 3.5px a module Nothing flagged
The URL goes into the matrix with Reed-Solomon error correction, and level Q means about a quarter of the symbol can be lost and still recovered. Two things then decide whether it scans, and the tool checks both. The quiet zone is four modules, which is what ISO/IEC 18004 requires and what a scanner uses to find the corners. The canvas is 287 pixels rather than the 300 asked for because 287 is 41 modules at exactly 7 pixels each: a fractional scale puts module edges mid-pixel, and measured, a 77-module symbol at exactly 300 pixels does not decode at all while the same symbol at 296 or 306 does. Finally the code is decoded back with jsQR, a decoder with no part in making it, at the size drawn and again shrunk to 3.5 pixels a module, which is roughly what a phone camera at arm's length gets. That second reading is the one that catches a code which only works from a clean screenshot.
A QR code is a 2D matrix of black and white "modules" (square cells) that encode data in a specific pattern defined by ISO/IEC 18004. The capacity depends on the chosen version (1 through 40, corresponding to grid sizes from 21x21 up to 177x177 modules) and the error correction level. A Version 1 code at error correction level L holds 25 alphanumeric characters or 17 bytes of binary data. A Version 40 code at level L holds up to 4,296 alphanumeric characters or 2,953 bytes. In practice, most generated QR codes for URLs are Version 3-7 (29x29 to 45x45 modules) because typical URLs fit comfortably there. The four error correction levels, L (7%), M (15%), Q (25%), and H (30%), control how much of the code can be obscured, damaged, or covered (for instance, by a logo embedded in the center) and still scan successfully. Reed-Solomon error correction codes add redundancy to the data. Higher correction levels consume more modules for redundancy, so at a fixed data capacity they require a larger grid. The sweet spot for most use is Level M for screen display and Level Q-H for printed materials that may be scratched, or when you want to overlay a logo (which requires H to survive).
The QR format supports several data encoding modes, and the encoder picks whichever is most compact for your input. Numeric mode (3 digits per 10 bits) is densest for pure numbers. Alphanumeric mode (2 chars per 11 bits, 45-character alphabet including uppercase letters, digits, space, and some symbols) is next. Byte mode (8 bits per byte) handles arbitrary bytes including lowercase letters and full URLs. Kanji mode uses 13 bits per character for Japanese. URLs almost always fall into byte mode because they contain lowercase letters; if your data is all uppercase and digits, the generator will automatically use alphanumeric mode, producing a smaller code for the same data.
Module size (the "pixel size" of each cell) and the quiet zone matter for scanner reliability. ISO/IEC 18004 section 6.3.8 requires a four-module quiet zone (blank margin) around the code, because that is what a scanner uses to find the finder patterns at the corners; this tool defaults to four and lets you change it, and says so when you set it lower. It also snaps the canvas to a whole number of pixels per module, which matters more than it sounds: a fractional scale puts module edges mid-pixel, and measured, a 77-module symbol rendered at 300 pixels gives 3.529 pixels a module and will not decode at all, while the same symbol at 260, 270, 320 or 340 pixels reads fine. Module size in printed output should be at least 0.4 mm for reliable phone-camera scanning at 30 cm distance. Rule of thumb: the scannable distance is roughly 10x the code's width, so a 2 cm code scans reliably at about 20 cm. For posters meant to scan from across a room, make the code at least 10 cm wide.
Color customization is supported but has real limits. Scanners use contrast detection to distinguish modules, which means dark-on-light designs work and light-on-dark ("inverted") designs sometimes fail on older scanners. Using colored modules (red on white, blue on yellow) works only if the contrast ratio is high enough; aim for at least 3:1 luminance contrast, which the tool computes and shows for whatever two colours you pick. Logos embedded in the center work only when error correction is H (30%) because the logo obscures modules that must be reconstructed from redundancy; the tool works out what fraction of the symbol area your logo covers and compares it against the recovery capacity of the level in use, from table 12 of the standard, so it can tell you the logo is too big rather than leaving you to find out. Every code is decoded back here with jsQR, an independent decoder that had no part in making it, both at the size drawn and again shrunk so each module is about three pixels, which is roughly what a phone camera at arm's length gets. That second reading is the one that finds real problems, because a code with too little contrast or too little margin often still decodes from a clean bitmap and fails from a photograph. It is still worth testing across at least iOS Camera, Android native camera and a scanning app before relying on a code in production, because a decoder in a browser is not a camera in a pocket.
Add scannable links to flyers, business cards, and posters that direct people to your website or landing page.
Link to manuals, warranty registration, or product pages by printing a QR code on the box.
Generate unique QR codes for tickets or badges that can be scanned at entry.
Create a QR code that lets guests join your network by scanning instead of typing a password.
Encode vCard data so others can add your contact info by scanning.
Up to about 3,000 alphanumeric characters or 4,296 numeric digits at the lowest error correction level. Higher correction levels reduce capacity.
Level M (15% recovery) is a good default. Use Level H (30%) if the code will be printed on surfaces that might get worn or partially covered.
Yes, and the tool computes the contrast ratio between them and says when it is below about 3:1, which is where a camera stops being able to separate light modules from dark ones. It also flags a light-on-dark code, because a reader is not required to support one.
The line under the preview says so. The code is decoded back with jsQR from the pixels that were painted, at the size drawn and again shrunk to about three pixels a module. If either reading fails, it says which and why.
Because it is rounded to a whole number of pixels per module. A fractional scale puts module edges mid-pixel and can make a code unreadable: a 77-module symbol at exactly 300 pixels does not decode, while the same symbol at 296 or 306 does. The panel states the size it actually drew.
Conversions run on your device in JavaScript. The values you enter are never sent over the network.