QR Code Generator
Create downloadable QR codes for URLs, text, Wi-Fi and more.
About the QR Code Generator
A QR code (Quick Response code) is a two-dimensional matrix barcode invented in 1994 by Masahiro Hara at Denso Wave, a Toyota subsidiary, for tracking automotive parts during assembly. Unlike the original one-dimensional barcodes (UPC, EAN) that can encode only a dozen digits, a QR code can hold up to 2,953 bytes of binary data, 4,296 alphanumeric characters, or 7,089 numeric digits in a single square symbol that can be scanned from any angle by a phone camera.
QR codes work by arranging black and white modules in a square grid, with three large square patterns in the corners (the finder patterns) that allow the scanner to detect orientation, size, and skew. The data is encoded using Reed-Solomon error correction, which allows the code to remain readable even when up to 30% of the modules are obscured, damaged, or covered — this is why QR codes work even when printed on a crumpled flyer or partially obscured by a logo.
This tool generates QR codes via the public api.qrserver.com endpoint maintained by goqr.me. The encoded text and parameters are sent over HTTPS to the rendering service, which returns a PNG or SVG image. For sensitive data you do not want transmitted to a third party, consider using a self-hosted generator such as qrencode or the qrcode npm package.
How It Works
QR codes support four error correction levels defined by the ISO/IEC 18004 standard. Each level reserves a percentage of the symbol for redundant data computed using Reed-Solomon error correction:
- L (Low) — 7% of data can be restored. Smallest symbol size for a given input, but the least resilient to damage.
- M (Medium) — 15% recovery. Default for most applications.
- Q (Quartile) — 25% recovery. Used when a logo or icon will be overlaid in the center of the code.
- H (High) — 30% recovery. Used in industrial environments where the code may be dirty, scratched, or partially obscured.
Higher error correction costs capacity: a version-10 QR code at level L holds 271 bytes of alphanumeric data, but at level H it holds only 174 bytes. The encoder selects the smallest symbol version (1 through 40) that can hold the input at the chosen error-correction level, then pads any remaining capacity with terminator and padding bytes.
The generator passes four parameters to the API: size (output image dimensions in pixels), ecc (the error-correction level), margin (the “quiet zone” of white space around the code, mandatory 4 modules by spec), and data (the URL-encoded text). The API returns a PNG image; appending &format=svg returns an SVG vector version that scales without pixelation.
The quiet zone is critical for scanner reliability. ISO/IEC 18004 mandates a minimum 4-module-wide white border around the QR code so the scanner can distinguish the code from surrounding content. Reducing the margin below 4 risks scan failures, particularly when the code is embedded in dense visual content.
Worked Examples
Encoding the URL https://ht99.icu at size 300px, level M, default margin produces a 300×300 PNG with a version 2 QR code (25×25 modules). The image weighs about 4 KB. Scanning it with any phone camera opens the URL in the device’s default browser.
Encoding a longer string like WIFI:T:WPA;S:MyHomeNetwork;P:CorrectHorseBatteryStaple;; (the standard Wi-Fi QR format) produces a version 4 code (33×33 modules) at level M. When scanned by an Android phone, the OS displays a prompt offering to join the network with the embedded SSID and password. iPhone added similar support in iOS 11.
For a vCard contact (BEGIN:VCARD ... END:VCARD with name, phone, email, and address), expect a version 6 or 7 QR code at level L. Scanning it on iOS adds the contact to your address book. For large vCards, drop to level L and increase the size to 500px so the dense module pattern remains scannable.
If the input is too long for any single QR code at the chosen error-correction level, the API returns an error image. The absolute maximum is 2,953 bytes of 8-bit data at level L, version 40. URLs over 1,200 characters typically require version 30+, which most phone cameras cannot resolve without macro focus.
When to Use This Tool
- Generating QR codes for restaurant menus, Wi-Fi access, and event check-in links on printed materials.
- Creating vCard contact QR codes for business cards that import directly into the recipient’s phone.
- Encoding payment URLs (Bitcoin
bitcoin:, UPIupi:, EURiban:) for invoice scanning. - App store deep links that route iOS vs Android users to the correct storefront from a single poster.
- Asset tags on equipment with a QR linking to a maintenance log or asset-management URL.
- Two-factor-authentication TOTP secret enrollment (encode as
otpauth://totp/...URI). - Event-ticket validation where each attendee gets a unique QR containing a signed identifier.
Limitations & Disclaimer
This tool relies on the third-party api.qrserver.com service to render QR codes. While the connection is HTTPS-encrypted, the data you encode is transmitted to that service and may be subject to their logging and privacy policies. Do not encode passwords, private keys, PII, or sensitive identifiers. The service may rate-limit or be temporarily unavailable; for mission-critical production QR generation (event tickets, payment codes, asset tags), use a self-hosted library. Static QR codes cannot be edited after creation — if the target URL changes, you must regenerate the code and reprint. For dynamic QR codes (with redirect URLs you can edit later), use a dedicated QR-management service. See our disclaimer for full terms.
Frequently Asked Questions
Will my QR code work without internet access?
If the encoded data is a URL, the scanner needs internet access to load the page. If the data is plain text, contact info, or a Wi-Fi credential string, scanning works fully offline. The QR code itself is just printed pixels — the data is decoded on the device without any network call.
How much data can a QR code hold?
The maximum is 2,953 bytes of binary data, 4,296 alphanumeric characters (uppercase letters, digits, space, <code>$%*+-./:</code>), or 7,089 numeric digits — all at error correction level L on a version 40 code (177×177 modules). Most phone cameras cannot resolve a version 40 code reliably; for consumer use, keep inputs under 300 characters.
What error correction level should I use?
Use M (15%) for typical applications. Use L (7%) when you want the smallest possible code for short text. Use H (30%) when the code will be printed on a surface that may be scratched, dirty, or have a logo overlaid in the center. The logo can cover up to 30% of the modules at level H without breaking scan-ability.
Why does my QR code look blurry when printed?
QR codes are raster images. If you generate a 300×300 PNG and print it at 3 inches (7.6 cm), you get 100 DPI — too low for reliable scanning. Generate at 600px for a 2-inch print, or download the SVG version which scales to any size without pixelation. Print at 300 DPI minimum.
Is the data sent to the API secure?
The data is sent over HTTPS to <code>api.qrserver.com</code>, a third-party service. The transmission is encrypted, but the operator could theoretically log your input. Do not use this tool for passwords, private keys, or sensitive personal data. For sensitive content, use a self-hosted QR encoder such as the <code>qrcode</code> Python library or <code>qrcode</code> npm package.
Can I encode binary data in a QR code?
Yes. The QR standard supports an 8-bit byte mode that can encode any byte value 0-255, including binary files. However, most consumer scanners display binary data as raw bytes, which is rarely useful. For binary content, base64-encode it first — but be aware that base64 inflates size by 33%, so you will hit the capacity limit faster.
Last updated: July 21, 2026 · Author: HT99 Tools Editorial Team · Reviewed by: HT99 Tools Editorial Team