CLIENT-SIDE UTILITY

Free Instant QR Code Generator

Create crisp, high-resolution QR codes for websites, plain text, and phone actions. In-browser generation with PNG download. Test your code before sharing or printing.

Configure QR Code
Live QR Code
100% Client-Side Rendered

Test with the Android and iOS camera apps your audience uses.

How QR Codes Work on Android & iOS

Modern smartphones feature built-in machine-vision barcode scanners in the system Camera app. Scanner behavior varies: many camera apps offer a link preview or confirmation before opening a browser or dialer.

Looking to share WiFi without passwords?

Check out our dedicated WiFi "Scan to Connect" QR Generator to let guests connect immediately without typing tricky passwords.

Design a QR code that survives real use

A QR code transports bytes; a scanner decides what those bytes mean. Use this generator for a short website address, a support contact, or a test payload for an Android scanner. Generation happens in your browser. The page loads third-party libraries, so use synthetic examples instead of confidential credentials. This tool exports PNG images, not SVG files. Always scan the downloaded image, because a successful preview alone does not prove that a printed label will work.

Error correction: L, M, Q, and H

QR symbols use Reed-Solomon error correction: extra codewords let a decoder reconstruct damaged data. The four levels recover approximately L: 7%, M: 15%, Q: 25%, and H: 30% of total codewords under suitable conditions. These percentages are not permission to cover the same proportion of the picture. Damage to finder patterns, poor focus, and missing borders can prevent detection before correction starts. Higher protection also leaves less capacity for the message at a fixed symbol version.

For a Reed-Solomon block with r correction codewords, up to floor(r / 2) unknown erroneous codewords can be corrected. Start with M for a clean screen, then compare Q or H for a label exposed to wear. Keep logos away from structural patterns and test the final artwork. A shorter URL can improve readability more than simply selecting the highest correction setting.

Data capacity and module size

The following matrix shows Version 1 maximum payloads for a single encoding mode, without additional metadata. Numeric mode accepts digits; alphanumeric mode has a restricted alphabet. Byte mode counts bytes, not visible characters. Non-ASCII UTF-8 text may consume several bytes per character. The library used by this tool encodes byte data, so numeric-mode limits should not be treated as this generator's input allowance.

Version 1 capacity: 21 by 21 modules
LevelDigitsAlphanumeric charactersBytes
L412517
M342014
Q271611
H17107

For version v, the symbol width is N = 21 + 4(v - 1) modules. Add a quiet zone of at least four modules on every side. At four pixels per module, Version 1 therefore needs (21 + 8) × 4 = 116 pixels including its border. Avoid resizing with smoothing, which blurs module boundaries. Keep the exported image on a white background with generous whitespace, and check it at the actual print size and expected scanning distance.

Integrate CameraX with ML Kit on Android

A custom scanner needs a camera permission flow, a CameraX preview, and an ImageAnalysis pipeline. Restrict ML Kit Barcode Scanning to FORMAT_QR_CODE when other formats are unnecessary. Pass the camera image and its rotation to InputImage, process asynchronously, and close the ImageProxy after processing completes, including failure paths. Use KEEP_ONLY_LATEST backpressure so decoding cannot accumulate a queue of stale frames. Close the scanner when its owner is destroyed.

The bundled ML Kit model is available immediately; the downloaded model needs an availability strategy for first use and offline conditions. Test rotation, denied permissions, low light, and repeated detections. Debounce the same payload while a result sheet is visible. Google's code scanner is another option when you do not need your own camera interface. Follow the current SDK setup documentation for supported Android versions and dependencies.

From scan result to Android intent

Display the decoded destination before offering an action. For web links, parse the URI and allow only intended schemes such as HTTPS; for phone numbers, use ACTION_DIAL so the person confirms the call. Launch ACTION_VIEW only after confirmation and handle ActivityNotFoundException. Never pass arbitrary scanned text into Intent.parseUri, a shell command, or an unrestricted WebView. A QR code can point to a phishing site just as an ordinary link can.

For an app onboarding flow, prefer a stable HTTPS landing page with a fallback for people without your app. Configure verified Android App Links separately; drawing a QR symbol does not establish domain ownership or guarantee app routing. Keep old campaign URLs working after a redesign. Before printing a batch, test two camera apps, a small screen, and a paper copy, then record the payload and correction level with the artwork.

Technical references

See DENSO WAVE's capacity tables and correction explanation, plus Google's ML Kit integration guide.

Frequently asked questions

Does H correction guarantee a damaged QR code will scan?

No. H can restore approximately 30% of total codewords under suitable conditions, but damaged finder patterns, poor focus, and missing quiet zones can prevent detection.

Does the QR code expire?

The encoded text does not expire. A linked website can move or stop working, so maintain the destination and test old printed codes.

Can this generator export SVG?

No. This tool currently downloads PNG images. Test the downloaded PNG at the intended size before printing.

Published by AndroidRich. Technical content updated . Report a correction.