How it works
Bitcoin addresses are not arbitrary strings — every address encodes a spending condition, a format version, and a checksum, all packed into a compact human-readable form. This validator decodes that structure entirely in your browser without making any network request. Nothing you type is ever transmitted anywhere.
There are two distinct encoding families in use on the Bitcoin mainnet today. The older family uses Base58Check, which is the encoding behind Legacy (P2PKH) addresses starting with 1 and Wrapped SegWit (P2SH) addresses starting with 3. Base58Check is a 58-character alphabet (no 0, O, I, or l to prevent visual confusion) with a 4-byte double-SHA256 checksum appended to the payload. When you paste a 1… or 3… address, the validator decodes it with Base58Check and verifies that the checksum bytes match. A single character error — even one transposition — produces a different checksum and is caught immediately.
The newer family uses Bech32 (defined in BIP 173) for Native SegWit addresses starting with bc1q. Bech32 uses a 32-character alphabet and a BCH error-correcting code that can not only detect errors but also localize them. A bc1q address carries a witness version byte of zero followed by a 20-byte hash (P2WPKH) or a 32-byte hash (P2WSH, used for multisig and script contracts). The validator checks both the Bech32 checksum and the witness program length to distinguish P2WPKH from P2WSH.
Taproot addresses starting with bc1p use Bech32m (BIP 350), a slight modification to the Bech32 constant that improves the error-detection properties for witness version 1 and above. The validator tries Bech32 first; if that fails, it tries Bech32m and checks for witness version 1 with a 32-byte x-only public key. This is the most recent and most efficient Bitcoin address format — Taproot was activated at Bitcoin block 709,632 in November 2021.
All validation logic runs in a deterministic pure function. Bitcoin Core itself uses the same encoding libraries under the hood: bs58check for Base58 and bech32/bech32m for the native SegWit families. No private key material, no wallet derivation, and no transaction data ever enter the picture — the tool inspects only the public address string you provide.
Address format guide
Bitcoin has accumulated several address formats over its history, each reflecting an upgrade to the scripting layer:
- P2PKH (Legacy): Pay-to-Public-Key-Hash. The original Bitcoin address format dating to Satoshi’s first release. Starts with
1. All Bitcoin wallets and exchanges support it. Transaction inputs spending from P2PKH addresses are larger, resulting in higher on-chain fees relative to newer formats. - P2SH (Wrapped SegWit): Pay-to-Script-Hash. Starts with
3. Introduced in BIP 16, this format wraps an arbitrary redeem script — including SegWit scripts — behind a standard hash. It was the transitional mechanism that allowed SegWit adoption before nativebc1qwallets became universal. Fees are lower than P2PKH but higher than native SegWit. - P2WPKH (Native SegWit): Pay-to-Witness-Public-Key-Hash. Starts with
bc1qand is 42 characters long. Introduced by BIP 141 (SegWit), activated August 2017. This is the default format for most modern wallets including Bitcoin Core, Blue Wallet, and Sparrow. The witness discount makes inputs roughly 60% smaller in vbytes compared to P2PKH. - P2WSH (Native SegWit Script): Pay-to-Witness-Script-Hash. Also starts with
bc1qbut is 62 characters long because the hash is 32 bytes rather than 20. Used for multisignature schemes and other complex spending conditions. - P2TR (Taproot): Pay-to-Taproot. Starts with
bc1p. Introduced by BIP 341 (Taproot), activated November 2021. Encodes an x-only 32-byte public key. Simple single-key and complex multisignature spends look identical on-chain, improving privacy. Input vbytes are the smallest of any format — roughly 57.5 vbytes per input — so transaction fees are at their lowest.
Privacy note
Because this tool runs entirely client-side, there is no server that logs the addresses you check. Using an online validator that phones home with your address could leak information about which addresses you hold or are about to receive funds to. This tool has no back-end; your browser’s JavaScript engine is the only processor.
FAQ
Why is my address flagged as invalid?
The most common cause is a single character substitution or transposition. Bitcoin addresses are case-sensitive (except for the bc1 bech32 portion, which is lowercase only). A Base58Check address that differs by even one character will fail the 4-byte checksum. A Bech32 or Bech32m address has an even stronger error-correcting code and will similarly reject any corruption.
What about testnet addresses?
Testnet addresses use different version bytes and different human-readable parts. A testnet P2PKH address starts with m or n; a testnet bech32 address starts with tb1. This validator only recognizes mainnet formats and will report testnet addresses as invalid. This is intentional — if you accidentally send real mainnet coins to a testnet address string, the coins are gone.
Is a Lightning address (user@domain.com) format supported?
No. Lightning addresses (e.g., alice@wallet.satoshi.com) are an HTTP-based identifier (LNURL-pay) that resolves to a Lightning invoice, not an on-chain Bitcoin address. They are not validated here. Use the Invoice Decoder tool for BOLT 11 Lightning invoices.
Which format should I use when generating a new address?
For most users, Taproot (P2TR, bc1p…) is the best choice when your wallet supports it — lowest fees and best privacy. If your counterparty’s wallet cannot generate or send to Taproot, Native SegWit P2WPKH (bc1q…) is the next best option. Only use Legacy or Wrapped SegWit when required for compatibility with very old software.
Does this work offline?
Yes. Once the page has loaded, the validator runs without any network connectivity. There is no external dependency at runtime.
Related reading
- Wallet drainer red flags — 2026 verification checklist — drainer interfaces sometimes show a real-looking destination address that’s actually malformed or attacker-controlled. Validating before you send is the cheapest defense.
- Wallet installer SHA-256 verifier — the same idea, applied to the wallet binaries you install.
- Lightning address verifier — for LNURL / Lightning addresses with their own typosquat patterns.