Toolkit
All tools
Address check · Free

Crypto Wallet Address Validator

Check a Bitcoin or Ethereum address before you send. EIP-55 checksums for 0x addresses, Base58Check for 1 and 3, bech32 for bc1q and bech32m for taproot, with the failing check and the offending character named.

Checked in your browser · No lookup, no wallet, no upload

Well formed. Ethereum and every EVM chain, EVM account or contract. The EIP-55 checksum matches.

Address to check

Paste it exactly as you received it

Spaces and line breaks are removed, and a bitcoin: or ethereum: payment link is unwrapped to the address inside it.

Verdict
Well formed

Ethereum and every EVM chain · EVM account or contract. Well formed means the string is internally consistent, not that the address exists or belongs to anybody in particular.

Network
Ethereum and every EVM chain
Format
Hex, 20 bytes
Type
EVM account or contract
Characters
42
EIP-55
Checksum matches
  • Every EVM chain uses this address format, so a valid address tells you nothing about which chain holds the funds.
  • Whether this is a contract or an ordinary account is chain state, and cannot be told from the string.
What decodes out

The bytes underneath the text

An address is an encoding of twenty or thirty-two bytes plus a label saying how to spend them. This is what those bytes are.

Account bytes
5aaeb6053f3e94c9b9a09f33669435e7ef1beaed
Checksummed form, unchanged
0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed
What a pass proves

The string is internally consistent

  • The characters all belong to the alphabet the format uses.
  • The length matches the address type the prefix declares.
  • The checksum built into the address agrees with the rest of it.
  • The payload decodes to the right number of bytes for that type.
What it does not prove

A valid address can still be the wrong one

  • That the address exists on any chain, or that anyone holds its key. No lookup is performed here.
  • That it belongs to the person you are paying. A checksum has no idea who you meant to send to.
  • That it is on the chain you think. Every EVM chain shares the 0x format, and funds sent to the wrong one are usually gone.
  • That it was not swapped. Clipboard-hijacking malware replaces your recipient with a different valid address, which passes every check on this page.

A checksum catches a typo, not a substitution. The defence against substitution is checking the address through a second channel you trust, comparing the whole string rather than the first and last four characters, and sending a small test amount first when the sum is large.

Prefix reference

What the first characters tell you

The prefix is not decoration: it encodes the network and the script type, and it is covered by the checksum, so it cannot be edited to point somewhere else.

Address prefixes, the network and type each one encodes, and its usual length
Starts withNetworkEncodingTypeCharactersWhat it means
1Bitcoin mainnetBase58CheckP2PKH26 to 34The original address type, holding the hash of a single public key. Version byte 0x00, which encodes as a leading 1.
3Bitcoin mainnetBase58CheckP2SH34Pay to script hash: multisig, and the wrapped segwit that wallets used before native segwit was widely accepted. Version byte 0x05.
bc1qBitcoin mainnetbech32P2WPKH or P2WSH42 or 62Native segwit, witness version 0. Forty-two characters is a single key (20-byte program), sixty-two is a script (32-byte program).
bc1pBitcoin mainnetbech32mP2TR62Taproot, witness version 1. It must carry the bech32m checksum from BIP-350, not the bech32 checksum used by bc1q.
0xEthereum and every EVM chainHexAccount or contract42Twenty bytes written as forty hex characters. Mixed case is the EIP-55 checksum; all one case means no checksum is present.
tb1Bitcoin testnet and signetbech32 or bech32mSegwit42 or 62The testnet prefix. Sending real bitcoin to a tb1 address is impossible, because mainnet nodes reject it.
mBitcoin testnetBase58CheckP2PKH26 to 34Version byte 0x6f. Testnet key addresses begin with m or n depending on the hash that follows.
nBitcoin testnetBase58CheckP2PKH26 to 34The same 0x6f version byte as m. Which letter appears is decided by the payload, not by the address type.
2Bitcoin testnetBase58CheckP2SH35Version byte 0xc4, the testnet counterpart of a mainnet 3 address.

Every check on this page is arithmetic on the string in front of you, computed with Keccak-256, SHA-256, and the bech32 polynomial, all implemented in the page itself. No request is made to any server.

How it works

An address carries its own proof that it was typed correctly.

Every address format in use today has an error-detecting code built into it. Base58Check appends four bytes of a double SHA-256 over the payload, bech32 and bech32m append a six-character BCH code strong enough to catch four wrong characters anywhere in the string, and EIP-55 hides a Keccak-256 checksum in the letter case of an EVM address, which costs nothing on chain and survives copy and paste. None of that needs the blockchain, which is why validation can happen entirely in this tab. What none of it can do is tell you whose address it is, and that gap is the whole reason the honest limits below matter as much as the verdict above.

  1. 01

    Paste the address exactly as you received it

    Spaces and line breaks are stripped, and a bitcoin: or ethereum: payment link is unwrapped to the address inside it. Do not retype an address by hand: retyping is how the typo gets in, and the point of a checksum is to catch the one you did not notice.

  2. 02

    Read the verdict and the reason behind it

    A pass names the network, the script type, and the bytes underneath. A failure names the check that broke, and highlights the first offending character in the string, so a mistyped address is diagnosable rather than merely refused.

  3. 03

    Confirm the address through a second channel

    A checksum catches a typo. It cannot catch a substitution, which is what clipboard malware does. Compare the whole string against the source you trust, not just the first and last few characters, and send a small test amount when the sum is large.

For the moment before you press send

Named failures, both bech32 constants, and honest limits.

Four outcomes for an 0x address, not two

An all-lower-case EVM address is well formed and completely undefended: nothing in it can detect a typo. The same is true of an all-upper-case one. Mixed case is the EIP-55 checksum, and it either matches the Keccak-256 hash of the address or it does not. This page tells the four apart, because the difference between valid and unchecksummed is the difference between a safe paste and a coin flip.

bech32 and bech32m, with the right constant for the version

A bc1q address must end in the original BIP-173 checksum and a bc1p taproot address must end in the BIP-350 bech32m one. Using the wrong constant for the witness version is the classic bug in this code, so both are implemented and both are tested against the published vectors, including the deliberate mix-ups the BIPs supply for exactly this reason.

Failures name the check and the character

Bad checksum, an excluded character, mixed case in a bech32 string, a length that does not match the prefix, an unknown version byte, an unrecognised human-readable part: each comes back as its own message with a position where the format allows one. A validator that answers only yes or no leaves you hunting for the typo yourself.

Base58Check down to the version byte

A 1 address carries version 0x00 and a 3 address carries 0x05, verified against the four-byte double SHA-256 checksum. A valid checksum with a foreign version byte gets its own answer, because a Litecoin address pasted into a Bitcoin field is a different mistake from a mistyped one, and deserves a different message.

A batch mode for payout lists

Paste up to two hundred addresses and get a table with a per-row reason, plus a count of repeats, which is the failure mode of a hand-assembled payout file. Everything stays in the tab, so a list of customer addresses is not uploaded anywhere to be checked.

No lookup, no wallet, no price feed

Every check here is arithmetic on the string in front of you. There is no explorer request, no RPC call, no wallet connection, and no key or seed phrase generation of any kind. That is a deliberate limit, and it is why the page can be honest about what a pass does and does not prove.

Address questions

Checksums, chains, prefixes, and what a pass does not prove.

What does a valid address actually mean here?+

It means the string is well formed and internally consistent: the characters belong to the right alphabet, the length matches the type the prefix declares, and the checksum built into the address agrees with the rest of it. That is all it means. It does not mean the address exists, that anyone holds the private key for it, that it has ever received funds, that it is on the chain you think, or that it belongs to the person you are paying. None of those questions can be answered without asking a node, and this page asks nothing.

Why does an all-lower-case Ethereum address still pass?+

Because it is a valid address, just an undefended one. EIP-55 hides a checksum in the letter case, so an address written entirely in one case carries no checksum at all and a single mistyped character in it would go completely undetected. That is why this page reports four outcomes rather than two: lower case and upper case are marked as unchecksummed, mixed case is verified against the Keccak-256 hash, and a mixed-case address that fails is flagged as a typo or an alteration. If you have a choice, always circulate the checksummed form.

Which chain is my 0x address on?+

Every EVM chain shares the same twenty-byte address format, so the string cannot tell you. Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain and the rest all accept the same address, and the same private key controls it on all of them. That is convenient until it is not: sending a token to the right address on the wrong chain is one of the most common ways funds are lost, and no validator can warn you, because there is nothing wrong with the address. Confirm the network in your wallet, not in the address.

Can you tell me whether this is a contract or a normal wallet?+

Not offline. The difference between an externally owned account and a contract is whether code is stored at that address, which is chain state rather than anything encoded in the string. A block explorer can tell you, and it matters: sending tokens to a contract that was not written to receive them is a well-known way to lose them permanently.

What is the difference between bc1q and bc1p?+

The character after bc1 is the witness version. A q is version 0, which is native segwit: forty-two characters for a single key and sixty-two for a script. A p is version 1, which is taproot. They also use different checksums. Version 0 uses the original bech32 constant from BIP-173, and version 1 and above use bech32m from BIP-350. The change was deliberate: it means an old wallet that only knows bech32 will reject a taproot address rather than silently mangle it, so both constants are implemented here and a mismatch is reported as its own error.

Why are 0, O, I, and l missing from Bitcoin addresses?+

Base58 is Base64 with the confusable characters removed. Zero and capital O look alike in many fonts, as do capital I and lower-case l, and the plus and slash of Base64 break when an address is double-clicked or wrapped in a URL. Bech32 makes the same trade differently, dropping 1, b, i, and o from its alphabet and using lower case throughout, which is also why a bech32 address is never mixed case: the checksum is computed over one case, so a mixed string cannot be verified at all.

The checksum passed but I sent to the wrong address. How?+

Almost certainly a substitution rather than a typo. Clipboard-hijacking malware watches for something that looks like an address and replaces it with the attacker's own, which is a perfectly valid address and passes every check on this page. Address-poisoning attacks work similarly, seeding your transaction history with a lookalike so a later copy from the wrong row still validates. A checksum only detects corruption, never a swap. The defence is verifying the address out of band, comparing the whole string rather than the first and last four characters, and sending a small test amount first.

Do you support Litecoin, Dogecoin, Solana, or Monero?+

Not as valid targets, but they are recognised well enough to be named. A Litecoin address decodes as Base58Check with a version byte that is not Bitcoin's, and an ltc1 address has a human-readable part that is not bc, so both come back saying which chain they belong to rather than a bare rejection. Solana and Monero use different encodings entirely and will come back as an unrecognised format. Bitcoin and the EVM chains are what this page verifies.

What happens if I paste a private key or a seed phrase?+

A WIF private key is recognised by its version byte and stopped with a warning rather than a verdict, because that string can spend your coins and should never be typed into a website, including this one. Nothing is transmitted either way, since the page makes no requests, but the safe habit is absolute: a receiving address is public and can be pasted anywhere, while a private key or a seed phrase should only ever be entered into your own wallet software. This tool never generates keys, seed phrases, or addresses. It only reads what you paste.

Is anything uploaded when I check an address?+

No. Keccak-256, SHA-256, and the bech32 polynomial are all implemented in the page itself, so validation is pure arithmetic that runs in your tab. There is no explorer lookup, no RPC endpoint, no analytics on the input, and no wallet connection. A batch of two hundred customer addresses is checked without any of them leaving your machine, which is the main reason to use a local validator rather than pasting a payout list into a search box.

More focused tools, ready when you are.

Explore the growing collection for calculations, documents, writing, and everyday work.

Browse all tools