QR Code Generator
Generate a QR code from any text, URL or Wi-Fi string instantly. Choose the error-correction level and output size, then download it as a PNG. Generated entirely in your browser — nothing is sent to a server.
Type or paste the content you want encoded — a URL, plain text, or a formatted string like a Wi-Fi config. The QR code updates live; pick an error-correction level and size, then download it as a PNG.
Content
Higher levels (Q, H) survive more damage or a logo overlay, at the cost of a denser code.
QR code
Type something to generate a QR code.
Learn more
What's actually in the pattern
A QR code is a grid of black and white square modules, and most of that grid is the actual encoded data — but three of the large squares in the corners (the finder patterns) exist purely so a scanner can locate and orient the code instantly, even if the photo is tilted, rotated, or taken from an angle. Smaller alignment patterns and timing patterns elsewhere in the grid let the scanner correct for perspective distortion and read the correct module boundaries even on a code printed on a curved or slightly warped surface.
The QR standard defines several encoding modes chosen automatically based on the content: numeric mode packs digits-only content most densely, alphanumeric mode handles a fixed set of uppercase letters and common symbols, and byte mode handles arbitrary text or binary data, including lowercase letters, at a lower data density than the other two. That's the practical reason a short numeric string and an equally long piece of mixed-case text don't produce equally dense-looking codes — the encoding mode itself, not just the character count, determines how much of the grid a given payload needs.
What the error correction level trades off
QR codes bake in Reed-Solomon error correction, meaning a scanner can still read the full content even if part of the code is damaged, dirty, or obscured — up to a point that depends on the chosen level. The QR standard defines four levels: L (Low) tolerates roughly 7% of the code being unreadable, M (Medium) roughly 15%, Q (Quartile) roughly 25%, and H (High) roughly 30% — each higher level adds more redundant data to the grid, which means a denser, more complex-looking pattern for the same content.
The practical decision is a tradeoff between robustness and visual complexity: a code that will only ever be scanned from a clean screen doesn't need much error correction margin, while a code that will be printed small, laminated, stuck on a dusty surface, or have a logo overlaid in the center genuinely benefits from H-level correction, since the extra redundant data is exactly what lets a scanner reconstruct the covered or damaged portion.
Static codes vs. dynamic (redirect) codes
A static QR code, like the ones this tool generates, encodes your exact content directly into the pattern — there's no server involved in scanning it, no account required to create it, and no way for it to ever stop working or be redirected elsewhere, because the data a scanner reads is the data you originally gave it, permanently. The tradeoff is that a static code's content is fixed the moment it's generated: change the destination URL later, and the printed code is now wrong.
A dynamic QR code instead encodes a short URL pointing at a third-party redirect service, which then forwards the scanner to whatever destination is currently configured — letting the underlying destination be changed after the code is printed, and typically letting the service track scan counts, locations and timestamps. That flexibility is genuinely useful for things like printed signage that might need updating, but it also means the code's owner depends on that third-party service staying online indefinitely, and that every scan is now visible to that service in a way a static code's scans never are.
The security angle: "quishing"
QR codes have become a growing phishing vector — sometimes called "quishing" — precisely because a human can't preview the destination URL before scanning the way they instinctively hover over a suspicious link in an email. A malicious QR code sticker placed over a legitimate one (on a parking meter, a restaurant menu, a flyer) can silently redirect victims to a lookalike login page or payment form, and because it arrived as an image rather than a clickable link, it tends to bypass the skepticism people have learned to apply to phishing emails.
The practical defense is the same instinct that works for any link: check the URL your scanner shows before tapping through to it, be suspicious of a QR code that looks like it's been physically stuck over another one, and never enter a password or payment details on a page you reached by scanning a code in a public space unless you're confident of who actually controls that destination.
Frequently asked questions
Is the content sent to a server to generate the code?
No — the QR code is rendered entirely client-side in your browser. Nothing you type is transmitted anywhere.
What does the error correction level change?
It controls how much of the code can be damaged or obscured (e.g. by a logo overlay) while still scanning correctly. L is the most compact; H survives the most damage but produces a denser pattern.
Do these QR codes expire?
No — a QR code just encodes the text you gave it directly (a 'static' code). It works forever and isn't tied to any account or service, unlike a dynamic/tracked QR code.