Bitcoin QR Code Generator: Encode a Wallet Address Safely

A wallet address is 26 to 62 characters of near-random text. Nobody types one by hand, and nobody should. That's the whole reason receive screens in wallet apps show a QR code — it removes the transcription step, and with it the class of mistakes that ends with coins in a stranger's wallet. If you need that same code outside your wallet app — on an invoice, a donation page, a sticker by the till — you have to generate it yourself. Here's what actually matters when you do.

What goes inside the code

The simplest thing you can encode is the raw address, e.g. bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq. Most wallet apps will recognise a bare address when you scan it, and it works fine.

The better option is a payment URI. Bitcoin's version comes from BIP-21 and looks like this:

bitcoin:bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq

The bitcoin: prefix tells the phone which app should open. Scan a bare address with the camera app and you often get a "copy text?" prompt; scan a bitcoin: URI and the phone offers to hand it to your wallet directly. Ethereum has an equivalent (ethereum:0x…), and most major chains define their own scheme. QRafty's crypto wallet QR generator builds the URI for you once you pick the currency and paste the address, so you're not hand-typing prefixes and getting the colon in the wrong place.

Case sensitivity and bech32

One genuinely useful quirk: modern Bitcoin addresses starting with bc1 (bech32) are defined as case-insensitive, and the spec explicitly allows encoding them in uppercase inside a QR code. QR's alphanumeric mode is more compact than byte mode, so an uppercase bech32 address produces a visibly smaller, chunkier code that scans from further away. Legacy addresses starting with 1 or 3 are mixed-case Base58 and must never be case-changed — do that and the checksum fails.

The chain problem no QR code can solve

A QR code carries the address you put in it. It does not carry a guarantee about which network the sender uses. An Ethereum-style 0x… address is valid on Ethereum, Arbitrum, BSC, Polygon and a dozen other EVM chains; the code looks identical for all of them. If someone scans your code and sends USDT on the wrong network, the QR code was technically correct and the money is still gone.

So label the code in the surrounding design. "BTC (Bitcoin mainnet)" printed under the square does more for you than anything inside the square. If you accept multiple coins, generate a separate code per asset rather than one code and a hopeful caption.

"Blockchain secure QR code generator" — what that phrase should mean

There's no such thing as a QR code secured by a blockchain. A QR code is a picture of some text. The real security question is much narrower: who saw your address while you were making the code?

Two things to check on any generator:

  1. Does the address leave your machine? Server-side generators post your input to a backend. That's not catastrophic for a public receive address, but it does link your address to your IP in someone's logs. QRafty renders the code in your browser — the address is never uploaded.
  2. Is it a redirect? Some "free" generators produce a short link that resolves to your content later. For a payment address that is an unacceptable risk: the operator controls what the code resolves to. A crypto QR should encode the address literally, nothing else.

And the obvious one: never generate a QR code of a private key or seed phrase on any website, ours included. Receive addresses are public information. Keys are not.

Static codes and address reuse

The data lives in the image. Once you've generated and printed it, that code points at that address forever — you can't repoint it later. This collides with how HD wallets work: they hand you a fresh receive address per payment for privacy, and a printed code freezes one of them permanently.

For a donation jar or a shop counter that's usually an accepted trade-off, and plenty of businesses run a single public address on purpose. But know that you're choosing it. If per-payment privacy matters, use a payment processor's dynamic link and encode that URL instead.

Before you print

Size it properly too: for a counter-top sticker read at arm's length, 3 cm square is a sensible floor, and long addresses make denser codes that need more room than a short URL would.

Bitcoin QR Code Generator: Encode a Wallet Address Safely | QR generator