// No account · No expiry · 100% client‑side

Offline Bitcoin QR Code Generator | Privacy-First Crypto

Create a Bitcoin, Ethereum, Litecoin, Dogecoin, or Bitcoin Cash payment QR code in your browser. Uses BIP 21 and EIP-681. Includes token and privacy traps.

50QR code types
61Frame styles
6File formats
1 Complete the content
2 Design your QR
Shape style
Border style
Center style
3 Download your QR
Example preview

Example QR code preview shown. Enter content to create your code.

Excellent
High contrast and optimal density. 100/100
px
px

Need to change it after printing? Make a dynamic QR code

No recent history found. Create and download a QR code to see it here.

A Bitcoin QR code holds a payment URI in the BIP 21 format, bitcoin:<address>?amount=<BTC>, so a wallet app that scans it fills in the address and, if you set one, the amount. This generator also builds Litecoin, Dogecoin, Bitcoin Cash, and Ethereum links. It builds them in your browser, and it never sees a private key, because a receiving address does not need one.

This article is general information, not financial or investment advice. Crypto payments are irreversible, so confirm every address before you send funds.

How do you make a crypto QR code?

  1. Choose the coin in the Cryptocurrency menu.
  2. Paste your receiving address into Wallet Address. Do not use the placeholder: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa is the address from Bitcoin's first block, not yours.
  3. Optionally enter an Amount in whole coins, not in satoshis or wei.
  4. Download the code and scan it with the wallet you plan to receive from or send with.

For a Bitcoin address and 0.01 BTC, the code contains this text:

bitcoin:bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh?amount=0.01

Why does Ethereum use a different amount format?

Bitcoin, Litecoin, Dogecoin, and Bitcoin Cash links use the BIP 21 style: a decimal amount in coins, with no commas and no exponent. Ethereum's payment URI standard, EIP-681, has no amount at all. It defines value, counted in wei, the smallest unit, and its own example requests 2.014 ETH as value=2.014e18.

The generator converts your amount for you, so 0.01 ETH becomes:

ethereum:0xAbC…?value=10000000000000000

Wallet support for the amount varies. If a wallet ignores it, the payer types the amount. Always check the amount on the wallet's confirmation screen.

Which address types work?

Bitcoin address starts withTypeNotes
bc1qNative SegWit (Bech32)The common modern format, defined in BIP 173
bc1pTaproot (Bech32m)Defined in BIP 350. Not every older wallet can send to it
3P2SHScript addresses, used for multisig and for wrapped SegWit
1Legacy (P2PKH)The original format; larger transactions

The generator does not validate the address or its checksum, and it does not check that the address matches the coin you selected. A Litecoin address under the Bitcoin option produces a code that looks normal and fails at the wallet, or worse, sends to the wrong network.

Can this code request a stablecoin or token?

Not correctly. The Ethereum option requests the native coin, ether. Tokens such as USDT or USDC live in contracts and need EIP-681's function-call form, which this generator does not build. A payer who sends a token to your address on the wrong network can lose it. If you accept stablecoins, use the payment request feature of your wallet, which knows the network and the token contract.

Is a static crypto code a good idea?

Only for small, occasional payments and tips. A printed code means every payer sends to the same address, which is convenient and bad for privacy: reusing an address links all payments to it together. For business sales, generate a new address or invoice per payment in your wallet or payment processor, and put that on the screen instead.

  • Static code, static sticker: a fake sticker pasted over yours redirects payments, and there is no way to recall them.
  • Small test first: send a minimal amount and confirm it arrives before you print a batch.
  • Compare more than the ends: lookalike addresses can share the first and last characters, so check the middle of the address for larger sums.

Why scan instead of copy and paste?

Clipboard-hijacking malware watches for a copied address and swaps in the attacker's. A scan skips the clipboard, and the wallet shows the address so you can verify it. That protects the payer's device, but it does not protect against a tampered sign, which is a different risk.

The page works without a network after it has loaded: you can disconnect, generate a code, and see that nothing is transmitted. That is the practical way to check a "client-side only" claim yourself.

How do you test it?

Scan with your wallet, stopping at the confirmation screen, and read the address and amount. Use the payload decoder to view the raw URI. Print at a sensible size with the print size guide, and prefer SVG for signs. For risks and scams around codes, see can QR codes be hacked? and the wider payment QR code guide.

References

// FAQ

Frequently Asked Questions

Clear, direct answers to common questions about generating and deploying QR codes.

A BIP 21 payment link, bitcoin:<address>?amount=<BTC>. A wallet that scans it fills in the address and, if you set one, the amount in whole coins.

No. A receiving address is all it needs. Never enter a private key or seed phrase into any website.

Ethereum's payment URI standard, EIP-681, has no amount parameter. It uses value in wei, so the generator converts your amount: 0.01 ETH becomes value=10000000000000000. Wallet support for the amount varies, so check it on the confirmation screen.

Not correctly. The Ethereum option requests the native coin. Tokens live in contracts and need EIP-681's function-call form, which this generator does not build, and sending a token on the wrong network can lose it. Use your wallet's own payment request for tokens.

No. It does not validate the address or checksum, or whether the address matches the selected coin. Check the address in your wallet before you print.

For small, occasional payments and tips. Reusing one address for every payer links all payments together and hurts privacy, and a fake sticker over yours redirects money with no way to recall it. For business sales, use a new address or invoice per payment.