A Bitcoin QR code generator for payment requests and Lightning invoices
This Bitcoin QR code generator turns a receiving address into a scannable payment request. Add an optional amount in BTC, mBTC or sats, a label and a message, and the tool writes a standard bitcoin: link (BIP 21): the payer scans it and their wallet fills in the address and amount. Switch to Lightning invoice to turn a BOLT 11 invoice from your Lightning wallet into a lightning: code, with its amount, description and expiry shown so you can check them first.
Before anything is drawn, the address is checked the way wallets check it: legacy addresses (1…, 3…, m…, n…, 2…) by their Base58Check double SHA-256 checksum, and SegWit addresses (bc1q…, bc1p…, tb1…) by the Bech32 and Bech32m checksums of BIP 173 and BIP 350. One mistyped character is caught, the address type and network are named, and test-network addresses are flagged.
Nothing leaves your browser. The page never asks for a private key or seed phrase and fetches no prices, so the amount in the code is exactly what you typed. For other kinds of codes use the QR Code Generator; to test a printed code, use the QR Code Scanner.
How to use the Bitcoin QR Code Generator
- Choose On-chain (BIP21) for a Bitcoin address, or Lightning invoice for an invoice created in a Lightning wallet.
- Paste your receiving address. Badges show whether the checksum is valid, the address type (legacy, P2SH, native SegWit or Taproot) and the network.
- Optionally enter an amount in BTC, mBTC or sats, a label such as your shop name and a message such as an order number.
- Compare the address shown in groups of four with your wallet’s own screen, at least the first and last groups.
- Adjust error correction, size, margin, colours or a centre logo, and scan the preview with a wallet on another phone.
- Press Download PNG or Download SVG, or copy the payment link for a “Pay with Bitcoin” button.
Bitcoin QR Code Generator features
Wallet-grade address checks
Base58Check, Bech32 for SegWit v0 and Bech32m for Taproot, plus witness version, length and padding rules — tested against the official BIP 173 and BIP 350 vectors.
Correct BIP 21 links
Amounts in BTC with at most eight decimals; labels and messages percent-encoded so spaces and symbols survive scanning.
BTC, mBTC and sats
Whole-satoshi arithmetic, so 50,000 sats is always exactly 0.0005 BTC — no floating-point rounding.
Lightning invoice reader
Shows a BOLT 11 invoice’s network, amount, description, creation time, expiry and payment hash, and warns when it has expired.
Smaller codes in upper case
SegWit addresses and Lightning invoices ignore case, so they can use the QR code’s compact alphanumeric mode: fewer, larger modules.
Print-ready output
Quiet zone, colours with a contrast check, optional logo, PNG up to 2048 px or vector SVG.
Bitcoin address types this tool recognises
Testnet3, testnet4 and signet share the same formats, so no tool can tell them apart from the address alone. The output script shown under the address is what the payer’s wallet will lock the coins to.
| Starts with | Type | Encoding | Network |
|---|---|---|---|
| 1… | P2PKH (legacy) | Base58Check, version 0x00 | Mainnet |
| 3… | P2SH (scripts, often nested SegWit) | Base58Check, version 0x05 | Mainnet |
| bc1q… | P2WPKH or P2WSH (native SegWit v0) | Bech32 (BIP 173) | Mainnet |
| bc1p… | P2TR (Taproot, SegWit v1) | Bech32m (BIP 350) | Mainnet |
| m…, n…, 2… | P2PKH or P2SH | Base58Check, 0x6F or 0xC4 | Testnet and signet |
| tb1… | SegWit v0 or Taproot | Bech32 or Bech32m | Testnet and signet |
Anatomy of a BIP 21 payment link
A request for 50,000 sats to 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2, labelled “Asha Stores” with the message “Order 42”, becomes bitcoin:1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2?amount=0.0005&label=Asha%20Stores&message=Order%2042. The amount is always in whole bitcoin with a dot as the decimal separator, and spaces become %20.
Wallets show the label as the payee’s name and the message as a note; some show only one. Leave the amount empty for a donation code or a shop counter sign so the payer types it.
Safety checklist before you print or share a payment code
- Verify on the receiving device — ideally a hardware wallet screen, not just a copied text field.
- Watch for clipboard swaps. Malware can replace a copied address; compare the first and last groups before printing.
- Prefer a fresh address per payment. Reusing one links all its payments together on the public blockchain.
- Amounts are fixed in bitcoin. If your price is in dollars, rupees or pounds, convert it shortly before payment with the Currency Converter.
- Lightning invoices expire and are single-use, so never print one on a poster. LNURL and BOLT 12 offers are not handled here.
Bitcoin QR Code Generator FAQ
Is it safe to use a Bitcoin QR code generator?
Yes, if the address is right. The code contains only the public receiving address and the optional amount, label and message. This tool never asks for keys or seed words — never type those into any website — and nothing you enter is uploaded. Always compare the address with your wallet’s own screen.
Which wallets can scan these codes?
Almost every Bitcoin wallet reads BIP 21 links and fills in the address and amount; some ignore the label or message. Upper-case SegWit codes follow BIP 173’s advice for QR codes and are widely supported; if an older wallet struggles, untick the uppercase option.
Why does the tool say my address is invalid?
Every address carries a checksum, so one wrong, missing or swapped character makes it fail. Copy the address again instead of retyping it. Even the example address printed in BIP 21 fails its Base58Check checksum.
Can I enter the amount in dollars, rupees or pounds?
No. A payment link states the amount in bitcoin, and this tool fetches no live prices. Convert your price to BTC or sats first; the code then requests exactly that amount.
What is the difference between Bech32 and Bech32m?
Both are checksummed SegWit formats. BIP 350 found that Bech32 can miss an inserted or deleted “q” before a final “p”, so Taproot and later versions use Bech32m while version 0 (bc1q…) keeps Bech32. The tool tells you which rule failed.
Can I create a Lightning invoice here?
No. An invoice must be signed by the node that receives the payment, so create it in your Lightning wallet. This tool checks the invoice’s Bech32 checksum, shows what it asks for and draws the QR code; the payer’s wallet verifies the signature.