Guide · QR codes

Do QR codes expire? Static and dynamic codes explained

10 min read Updated By the PixWrench team Sources cited

A QR code is a pattern of black and white squares, and patterns don’t have expiry dates. Yet codes on menus, posters and packaging do stop working, sometimes right after a free trial ends. The difference comes down to what the code actually contains, and that’s easy to check once you know where to look.

The short answer

A QR code itself never expires. What can expire is the thing it points to.

  • A static code holds your content directly: the full web address, the Wi-Fi network name and password, the contact details. Nothing sits between the scan and the result, so it works for as long as the destination does.
  • A dynamic code holds a short link to someone else’s server, which then forwards the scanner to your real destination. If that forwarding stops, for example because a subscription lapsed or the service closed, every printed copy stops working at once.

The PixWrench QR code generator makes static codes only. Your data goes into the pattern, nothing is routed through us, and there’s no account to keep paying for.

What a QR code stores

The QR code was developed by a team led by Masahiro Hara at DENSO WAVE and announced in 1994. DENSO WAVE holds patents on it but has declared that it will not exercise them for standardized codes, which goes a long way toward explaining why QR codes are everywhere. The format became an international standard, ISO/IEC 18004, in June 2000; the current edition is ISO/IEC 18004:2024.

The standard describes how to turn data into that grid of squares and back again. The data can be numbers, letters, raw bytes (which covers UTF-8 text and web addresses) or kanji. According to DENSO WAVE, the largest code can hold up to 7,089 numeric digits, 4,296 alphanumeric characters or 2,953 bytes.

The code doesn’t know or care what the data means. A web address, a line of text and a Wi-Fi login are all just characters. Your phone’s camera app reads the characters and decides what to do: open a browser for a URL, offer to join a network for Wi-Fi details, or offer to save a contact card.

Static vs dynamic codes

“Static” and “dynamic” are industry labels, not categories in the standard. To the standard, both are simply encoded text. The difference is what that text is.

Static and dynamic QR codes compared
Static codeDynamic code
What’s encodedYour actual content (full URL, text, Wi-Fi, contact)A short redirect URL on a provider’s server
Edit after printingNo; a new destination needs a new codeYes, by changing the redirect
Works offline (Wi-Fi, text, contact)YesNo; the redirect needs a connection
Depends on a third partyNoYes, for every scan
Scan counts and analyticsOnly via your own website’s statsUsually, from the redirect server
Can stop working if the service endsNoYes

Dynamic codes have honest uses. They let you fix a typo after printing, and they can count scans. The trade-off is dependence. If the provider ends a free tier, raises its price, changes its terms or shuts down, the redirect can stop or point somewhere you didn’t choose, and there’s nothing you can do about the copies already printed.

You can get most of the flexibility without the dependence: point a static code at a page on your own domain, such as yoursite.com/menu. If the menu moves, change the page or add a redirect on your own site. The printed code never has to change, and you can see visits in your own website statistics.

What can still break a static code

Static codes don’t expire, but they aren’t indestructible either. The usual culprits:

  • The destination goes away. A page is deleted, a site is redesigned and its addresses change, or the server is down. The code still scans perfectly; it just leads to an error.
  • The domain lapses. If a domain registration isn’t renewed, someone else can register it later and decide what your printed codes show.
  • The Wi-Fi details change. A Wi-Fi code stores the network name and password, so changing either one means printing a new code.
  • Physical damage. Scratches, folds, fading, glare from glossy laminate or a sticker over a corner. Error correction can absorb some of this, up to a point.
  • Poor contrast. Pale gray on white, or dark blue on black, gives the camera too little to work with. The generator’s scan-safety check measures the contrast ratio and flags anything under 4.5:1. It also warns about inverted colors (light squares on a dark background), because dark modules on a light background is the safest choice.
  • No quiet zone. Printing the code flush against other graphics makes it hard for scanners to find its edges. More on that below.

Error correction levels

QR codes use Reed-Solomon error correction, the same family of math used on music CDs, so a code can still be read when part of it is dirty or damaged. There are four levels, and DENSO WAVE states their approximate recovery capacity like this:

QR code error correction levels (DENSO WAVE)
LevelApproximate codewords that can be restoredTypical use
LAbout 7%Clean conditions, lots of data
MAbout 15%The most frequently selected level
QAbout 25%Codes that may get dirty
HAbout 30%Harsh conditions, or a logo over the middle

Higher levels aren’t free. More error correction means more squares for the same content, so the code grows to a larger version and each square gets smaller at a given print size. For most printed codes, M is a sensible default, and it’s the generator’s default too. When you add a logo, the generator switches to H, because the logo hides modules that have to be rebuilt.

Versions, modules and the quiet zone

Each small square in a QR code is a module. The size of the grid is set by the version, from 1 to 40. Version 1 is 21 × 21 modules, and each step up adds 4 modules per side, up to 177 × 177 at version 40. So:

modules per side = 17 + 4 × version

Version 2 is 25 × 25, version 10 is 57 × 57, and so on. More data, or a higher error correction level, pushes the code to a higher version. DENSO WAVE’s own example: 100 numeric digits at level M fit in version 3 (29 × 29). The generator’s capacity meter shows the version and module count live as you type, and it blocks content that won’t fit in version 40.

Around the pattern there must be a blank border, the quiet zone. DENSO WAVE specifies a margin four modules wide on all sides. That border is how a scanner tells where the code stops and the rest of the poster begins. The generator defaults to 4 modules and warns if you go below it.

There’s no single right size: it depends on the printer, the paper, the camera and how far away people will be. The chart below uses the working rule built into our generator for close-range scanning, such as a phone held at arm’s length: give each module at least 0.5 mm, count the 4-module quiet zone on each side, and never go below 2 cm overall.

minimum width = max(2 cm, (modules + 8) × 0.5 mm)

Minimum printed width for close-range scanning, including the quiet zone
VersionModules per sideWith quiet zoneAt 0.5 mm per moduleMinimum width
1212914.5 mm20 mm (0.79 in)
2253316.5 mm20 mm (0.79 in)
4334120.5 mm20.5 mm (0.81 in)
6414924.5 mm24.5 mm (0.96 in)
10576532.5 mm32.5 mm (1.28 in)
15778542.5 mm42.5 mm (1.67 in)
209710552.5 mm52.5 mm (2.07 in)
2511712562.5 mm62.5 mm (2.46 in)
4017718592.5 mm92.5 mm (3.64 in)

The pattern is clear: small versions hit the 2 cm floor, and from version 4 up the module count decides. Keeping the content short (a tidy URL rather than one with a long tracking string) keeps the version low and the code easy to print small.

For codes read from farther away, there’s a widely used rule of thumb: make the code about one tenth of the scanning distance. A poster read from 2 meters away would need a code roughly 20 cm wide; one on a sign across a room, 3 meters away, roughly 30 cm. It’s a rule of thumb, not part of any standard, so test-scan a printed proof from the real distance.

Checking a menu card code

Say your URL produces a version 4 code at level M. The chart gives a minimum of 20.5 mm for close range. People will scan it from a table, about 30 cm away, and 30 cm ÷ 10 = 3 cm. Printing it at 3 cm satisfies both, with room to spare.

For print, download the SVG: it’s a single vector path, so it stays sharp at any size. If a print shop or app wants a bitmap, the PNG download snaps to a whole number of pixels per module, and you can turn the SVG into a larger PNG with SVG to PNG if you need an exact width.

Using QR codes responsibly

A QR code has one unusual property: people can’t see where it goes until they scan it. That makes it convenient, and it also makes it a favorite tool for scams. The US Federal Trade Commission has warned about fake codes stuck over real ones on parking meters and codes sent in unexpected emails and texts, and its advice is to inspect the URL before opening it.

If you’re the one putting a code into the world, you can make that check easy:

  • Print the destination next to the code, in plain words, so people know what to expect and can type it if they’d rather not scan.
  • Use your own domain rather than a link shortener, so the address your visitors see matches your name.
  • Make tampering obvious. On public signs, print the code into the design rather than on a sticker, and check now and then that nobody has covered it.
  • Test before you print. The generator’s scan-safety check decodes the rendered code at three sizes plus a slightly blurred copy, using the open-source ZXing decoder, and offers one-click fixes if anything fails.

Nothing you type into the generator is stored, including Wi-Fi passwords, and downloaded file names don’t contain your content, so a file called qr-url-20261008.png says nothing about where it leads.

Frequently asked questions

Do QR codes from PixWrench expire?

No. The QR code generator makes static codes: your link, text, Wi-Fi details or contact card is encoded in the pattern itself, with no redirect through PixWrench. The code keeps working for as long as whatever it points to does.

Can I change where a printed QR code goes?

Not with a static code; the destination is part of the pattern, so a new destination means a new code. If you expect to change it, point the code at a page on your own website that you control, then update that page or set up a redirect on your own domain.

How can I tell whether a code is static or dynamic?

Scan it and look at the address your phone shows before opening it. If it’s the final destination, the code is static. If it’s a short link on a different domain that then forwards you elsewhere, it’s probably a dynamic code that depends on that redirect service.

Does adding a logo make a QR code less reliable?

A logo covers some modules, and the code relies on error correction to rebuild them. That’s why the generator switches to level H when you add a logo and keeps the logo between 8% and 20% of the area. Always run the scan-safety check before printing.

What size should a QR code be on a business card?

Scanned from about 20 to 30 cm away, the distance ÷ 10 rule of thumb suggests 2 to 3 cm wide, and a short URL usually fits in a small version. The generator shows the version and a minimum print width for your exact content.

Sources

Written and checked by the PixWrench team against the sources listed above. Spotted something out of date? Tell us and we’ll check it and note the fix in the changelog.