If you prefer a simple web version, check out EthSum:

Disclaimer: I'm the author, it's an open source tool.

Answer from Paul Razvan Berg on Stack Exchange
🌐
CoinCodex
coincodex.com › home › news › ethereum address checksum explained - checksummed vs non-checksummed eth address
Ethereum Address Checksum Explained | CoinCodex
January 31, 2025 - Ethereum address checksum validation is a cryptographic function that allows users to verify their blockchain addresses to ensure they are valid and don't contain any typos. Your Ethereum address–as well as every other Ethereum address in ...
🌐
EthSum
ethsum.netlify.app
EthSum
Simple Ethereum Address Checksum Tool
Discussions

addresses - What is the tool for address checksum? - Ethereum Stack Exchange
I have an error from web3: Unhandled rejection Error: Given address "0x" is not a valid Ethereum address. My question is if is there any tool that can fix my address (add checksum). More on ethereum.stackexchange.com
🌐 ethereum.stackexchange.com
Convert to checksum address in ETH - Transactions - Trezor Forum
Hello, I was going to withdraw my ETH from Trezor to an exchange, my surprise is when I entered my exchange address and the following message appears: “Convert to checksum address” When I press on the message the only change that is made is the following: 0x5FBc2b6C19EE3DD5f9Af96ff337D... More on forum.trezor.io
🌐 forum.trezor.io
1
August 2, 2021
accounts - Why don't Ethereum addresses have checksums? - Ethereum Stack Exchange
A checksum, similar to its use in Bitcoin addresses, can primarily prevent mistyped or invalid addresses from being used, before a transaction with an invalid address is constructed. Why don't Eth... More on ethereum.stackexchange.com
🌐 ethereum.stackexchange.com
Whats up with this Checksum address error
Ethereum uses checksum addresses to minimize the risk of user error in entering the address. The error in web3.py means you entered a non checksum address (all lower case). You can adjust this in your code by wrapping the address in the function Web3.toChecksumAddress as explained in the error. Example based on the error: Web3.toChecksumAddress(‘0x06012c8cf97bead5deae237070f9587f8e7a266d’). The question you have to ask yourself is why you have a non checksum address. The risk can be that the address you enter is wrong. Use the toChecksumAddress function therefore with caution. More on reddit.com
🌐 r/ethdev
3
1
February 13, 2020
🌐
Alchemy
alchemy.com › docs › how-to-handle-checksum-addresses
How to Handle Checksum Addresses | Alchemy Docs
If a character in the hash is a letter (A-F), then the corresponding character in the address should be uppercase. If a character in the hash is a number (0-9), then the corresponding character in the address should be left as lowercase.
🌐
Chainstacklabs
web3tools.chainstacklabs.com › checksum-address
Checksum address - The EVM Swiss Army Knife
A checksummed address is a standard Ethereum address with certain characters capitalized to include a checksum validation. Checksumming is a way of having error-detection codes in an Ethereum address. Checksumming aims to prevent errors when an address is typed manually.
🌐
npm
npmjs.com › package › ethereum-checksum-address
ethereum-checksum-address - npm
Convert Ethereum address to a checksummed address. Latest version: 0.0.8, last published: 4 years ago. Start using ethereum-checksum-address in your project by running `npm i ethereum-checksum-address`. There are 25 other projects in the npm registry using ethereum-checksum-address.
      » npm install ethereum-checksum-address
    
Published   Mar 23, 2022
Version   0.0.8
Author   Miguel Mota
Find elsewhere
🌐
Medium
medium.com › @knreth82 › ethereum-checksum-address-1ba5773be14d
Ethereum Checksum Address. An Ethereum address is a 20 byte value… | by KNR | Medium
March 14, 2022 - Ethereum Checksum Address An Ethereum address is a 20 byte value derived from the public key of the accounts’ EC Key pair. It is denoted in hexadecimal format, i.e 20 bytes of value will be …
🌐
Trezor Forum
forum.trezor.io › coins and transactions › transactions
Convert to checksum address in ETH - Transactions - Trezor Forum
August 2, 2021 - Ethereum addresses are displayed in HEX, so they are not case sensitive. You could capitalize or lower-case any of the letters, and the address is still the same since A and a are the same in HEX. However, our wallet does a checksum to see if the address is valid, and the capitalization is used to make this check.
🌐
Medium
medium.com › @zakhard › eip-55-explained-solving-the-address-checksum-problem-01ac2bb0efc4
EIP-55 Explained: Solving the Address Checksum Problem | by Zakhar Deyneka | Medium
April 1, 2024 - The checksum capitalization works ... ‘0x’ prefix. If the hash character, which is represented as a hexadecimal numeral, is greater than or equal to 8, the corresponding address character is capitalized....
🌐
Ethers
docs.ethers.org › v5 › api › utils › address
Addresses
If the case is mixed, it is a Checksum Address, which uses a specific pattern of uppercase and lowercase letters within a given address to reduce the risk of errors introduced from typing an address or cut and ...
Top answer
1 of 4
43

Edited to add: As predicted, with the launch of the Ethereum Name Service (ENS), users and wallets have gradually begun switching over to using strings like "mywallet.eth" instead of the raw hex addresses. Because that name was not known at the time this answer was written, it refers to the same concept as a "namereg".

I can elaborate on this a little bit, because it's not just the fact that end users are eventually expected to use human-readable strings for normal day to day transactions. It's that the raw hexadecimal string that you're calling an "Ethereum address" wasn't even intended to be the standard way of representing that information.

You may or may not know that when you send a bitcoin transaction to a "bitcoin address" such as 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3, the actual transaction itself doesn't contain the string "1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3". Instead, it decodes that representation into the real address 0xfc916f213a3d7f1369313d5fa30f6168f9446a2d, a pure hexadecimal representation that doesn't waste space on checksums and version bits. Look familiar?

It's true that the pure hexadecimal address itself doesn't contain any checksums. But there's nothing stopping you from writing software which uses the exact same method that Bitcoin does to create an encoding of that string in base 58 with a built-in version number and checksum. It would interoperate perfectly with the network by silently decoding the new "Ethereum address" into raw hexadecimal form. It could even accept both types of formats as long as you were careful to always include the "0x" on the front of the raw ones (which you should be doing anyways). Then you could send and receive with the exact same experience you have in Bitcoin. Perhaps with a different version number so that you don't accidentally mix up the addresses, though.

Vitalik has already pointed out one reason nobody bothered to do this for most Frontier apps. But there's another one, much more relevant. Ethereum apps don't take the Bitcoin approach because there is an even more featureful way of representing raw Ethereum addresses, called the ICAP, which looks like this: "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS". Like the standard Bitcoin address representation, it uses a wider range of alphanumeric characters to save space and includes a checksum. But that's not all, folks!

For one thing, the ICAP is a fully valid International Bank Account Number (or IBAN). That means that existing bank software can understand it and interact with it.

For another, the ICAP doesn't have to use hexadecimal addresses. Instead, once we all do switch over to using namereg contracts it can just use your actual human readable string to end up with something like "XE81ETHXREGJEFFCOLEMAN", which still matches bank formats but might be possible to actually remember!

Support for the ICAP is gradually growing, including within the official Ethereum clients. Perhaps one day soon, it will no longer be the case that the most common representation of an Ethereum address lacks a checksum!

Edit: As of February 2016, Vitalik has also implemented a transitional checksumming method where capitalisation of the otherwise case-insensitive hex address is used to provide some additional protection against accidental errors while remaining backwards compatible with software that doesn't support the checksum (and will ignore the case differences). Anyone developing software that supports inputting or displaying a raw hexadecimal encoding is strongly advised to implement this "capitals-based checksum" method.

Details:
With Vitalik's method, the address:

0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826

is compared against the raw binary keccack-256 hash of the address bytes, and where there are letters in the same corresponding place as a "1" bit the letter is capitalised (letters which correspond to the place of a "0" bit are left in lowercase form, and numbers are unchanged). This results in:

0xCd2a3d9f938e13Cd947eC05ABC7fe734df8DD826

Almost all non-checksum aware code will simply ignore the case differences above and interpret this representation identically to the first one, so there is very little disadvantage to implementation of the capitals-based checksum.

2 of 4
8

Here's the answer from V:

ethertarian

seriously? there's no checksum? you typo one character wrong and your ether is lost forever? Damn.... TIL Ethereum has a massive design oversight permalink

vbuterinEthereum

You're not meant to use ether addresses; you're meant to use the namereg and equivalents of things like bip70.

Source: https://www.reddit.com/r/ethereum/comments/33l08f/do_ethereum_address_not_have_a_checksum_like/

Straight from the developers - it appears checksums may be developed in future versions:

taylorgerringEthereum

I think everyone wants checksums and understands the benefits, but delivering a stable network protocol upgrade is of chief importance right now and has been since the beginning. Additional functionality in the clients themselves will hopefully follow soon after the Homestead hard-fork. :)

https://www.reddit.com/r/ethereum/comments/425js8/maybe_we_should_reconsider_checksums_as_default/

🌐
Trezor
trezor.io › learn › a › evm-address-checksum-in-trezor-suite
EVM address checksum in Trezor Suite
They consist of 42 characters, comprising a prefix 0x followed by 40 hexadecimal characters (i.e., the numerals 0-9, and the letters a-f). However, these addresses are case-insensitive, which means they can be written in either lowercase or uppercase. To improve the readability and security of Ethereum addresses, a checksum mechanism was introduced in Ethereum Improvement Proposal 55 (EIP-55).
🌐
Learn Me A Bitcoin
learnmeabitcoin.com › technical › keys › checksum
Checksum | A Simple Error Detection Tool
August 5, 2025 - This type of checksum does not help with error correction. The checksum will detect errors, but it will not help by telling you where the error is or how it should be corrected. ... Addresses – Every Base58 address (ones that start with a 1 or 3) contains a checksum.
🌐
Developer Jesse
developerjesse.com › 2021 › 04 › 13 › checksums.html
Checksums are for humans, not computers - Developer Jesse
April 13, 2021 - You can confirm each of the encodings using RSK’s address validator. You can also convert your address using the address converter tool. The checksummed address exists for human users when copying and pasting an address, or entering an address into a field.
🌐
GitHub
github.com › miguelmota › ethereum-checksum-address
GitHub - miguelmota/ethereum-checksum-address: Convert Ethereum address to a checksummed address
May 24, 2022 - $ ethereum_checksum_address 0x90f8bf6a479f320ead074411a4b0e7944ea8c9c1 0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1
Starred by 22 users
Forked by 9 users
Languages   JavaScript 78.3% | HTML 21.7% | JavaScript 78.3% | HTML 21.7%
🌐
Reddit
reddit.com › r/ethdev › whats up with this checksum address error
r/ethdev on Reddit: Whats up with this Checksum address error
February 13, 2020 -

Aloha, everytime i run my code from the Cryptokitties contract address i get this error.

web3.exceptions.InvalidAddress: ('Web3.py only accepts checksum addresses. The software that gave you this non-checksum address should be considered unsafe, please file it as a bug on their platform. Try using an ENS name instead. Or, if you must accept lower safety, use Web3.toChecksumAddress(lower_case_address).', '0x06012c8cf97bead5deae237070f9587f8e7a266d')

what am i doing wrong ? how can i fix this ?

🌐
Hedera
hips.hedera.com › HIP › hip-15.html
HIP-15: Address Checksum - HIPs - Hedera
March 11, 2021 - Hedera defines two standard ways to write addresses: with-checksum or no-checksum. The with-checksum format consists of a no-checksum address followed by a 5-letter checksum. In the HTML JavaScript demonstration, enter an address in no-checksum format in the top box and click CONVERT to convert it to the with-checksum format in the second box.
Top answer
1 of 7
3

The simple answer is that in solidity:

address(0xa54D3c09E34aC96807c1CC397404bF2B98DC4eFb);

It is true that the compiler warns you of incorrect checksum when it sees one, but that warning is probably there just to tell you that you might have gotten the wrong address altogether (because typically, constant addresses are copy-pasted from one place to another, and copy-pasting would not "accidentally" change some upper-case letter to lower-case or vice versa).

The Solidity compiler tells you exactly how you can fix it (manually):

SyntaxError: This looks like an address but has an invalid checksum. Correct checksummed address: "0xa54d3c09E34aC96807c1CC397404bF2B98DC4eFb". If this is not used as an address, please prepend '00'. For more information please see solidity.readthedocs.io/en/develop/types.html#address-literals address(0xa54D3c09E34aC96807c1CC397404bF2B98DC4eFb);

The solution then becomes:

Hexadecimal literals that pass the address checksum test, for example 0xdCad3a6d3569DF655070DEd06cb7A1b2Ccd1D3AF are of address payable type. Hexadecimal literals that are between 39 and 41 digits long and do not pass the checksum test produce an error. You can prepend (for integer types) or append (for bytesNN types) zeros to remove the error.

But again, these two constants are identical, and they will yield the exact same runtime-behavior.

2 of 7
3

As mentioned in comments Solidity doesn't have such functionality. Solidity (and also EVM) doesn't understand anything about address checksums, it's only a construct added on top of the toolkits.

If you really really want to you can calculate it yourself in Solidity. Here's the original EIP: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md with some example code. But I fail to see why you'd want to do that.

🌐
Safe
help.safe.global › en › articles › 40821-checksummed-address
Checksummed address | Safe{Wallet} Help Center and Support.
The easiest option is to get a checksummed version of an Ethereum address is to open the address on etherscan.io and copy it from there.