Is valid bitcoin address

Determine if a Bitcoin wallet address is “valid”

I know it’s possible to verify Bitcoin wallet addresses with Regex ( ^[13][a-km-zA-HJ-NP-Z0-9]<26,33>$ ) — but this is not 100% accurate and allows invalid addresses to be detected as valid.

Is there publicly available C# algorithm that can verify bitcoin wallet addresses? I’ve been Googling for one, but couldn’t find anything.

4 Answers 4

Yes, the Bitcoin-Address-Utility project is an open-source C# tool that includes this kind of verification. In particular, look at Casascius.Bitcoin.Util.Base58CheckToByteArray() .

I pieced together a simple version of Casascius.Bitcoin.Util.Base58CheckToByteArray() that works with dotnet core 2.0 — The only reference is to —>Org.BouncyCastle.Crypto.Digests;

> — borrowed from above

tl;dr: Had the same problem, therefore built something that suits my (and hopefully your) needs: https://github.com/Sofoca/CoinUtils

My specific requirements were…

  • Support for Bitcoin and Litecoin (and in the future probably other similar Altcoins)
  • Support for all address types (P2SH and P2PKH) and encodings (Base58 and Bech32)
  • Preferably no external (think NuGet) dependencies

While none of the above mentioned alternatives met all those I took some inspiration from previous answers and referenced projects. Thanks for that!

Hope this helps those searching for a complete yet lightweight solution to this problem.

Источник

Bitcoin/address validation

Warning: Many of these snippets are incomplete. It is recommended that you use an established library for any projects that are likely to see external use

Write a program that takes a bitcoin address as argument, and checks whether or not this address is valid.

A bitcoin address uses a base58 encoding, which uses an alphabet of the characters 0 .. 9, A ..Z, a .. z, but without the four characters:

  • 0 zero
  • O uppercase oh
  • I uppercase eye
  • l lowercase ell

With this encoding, a bitcoin address encodes 25 bytes:

  • the first byte is the version number, which will be zero for this task ;
  • the next twenty bytes are a RIPEMD-160 digest, but you don’t have to know that for this task: you can consider them a pure arbitrary data ;
  • the last four bytes are a checksum check. They are the first four bytes of a double SHA-256 digest of the previous 21 bytes.

To check the bitcoin address, you must read the first twenty-one bytes, compute the checksum, and check that it corresponds to the last four bytes.

The program can either return a boolean value or throw an exception when not valid.

You can use a digest library for SHA-256.

Example of a bitcoin address

It doesn’t belong to anyone and is part of the test suite of the bitcoin software.
You can change a few characters in this string and check that it’ll fail the test.

Источник

Bitcoin address

Enjoyed the article? Share:

Bitcoin address is an identifier (account number), starting with 1 or 3 and containing 27-34 alphanumeric Latin characters (except 0, O, I). Bitcoin addresses can be also represented as a QR-code. The addresses are anonymous and do not contain information about the owner. A bitcoin address can be obtained for free, using, for example, Bitcoin software. Bitcoin address example:

Addresses can be generated at no cost by any user of Bitcoin. For example, using Bitcoin Core, one can click «New Address» and be assigned an address. It is also possible to get a Bitcoin address using an account at an exchange or online wallet service.

Читайте также:  Правовые основы осуществления иностранных инвестиций

There are currently two bitcoin address format in common use:

Common Pay-to-Pubkey Hash (P2PKH) which begin with the number 1. Newer Pay-to-Script Hash (P2SH) type starting with the number 3, eg: 35bSzXvRKLpHsHMrzb82f617cV4Srnt7hS .

Contents

What’s in a Bitcoin address [ edit ]

Most Bitcoin addresses are 34 characters. They consist of random digits and uppercase and lowercase letters, with the exception that the uppercase letter «O», uppercase letter «I», lowercase letter «l», and the number «0» are never used to prevent visual ambiguity.

Some Bitcoin addresses can be shorter than 34 characters (as few as 26) and still be valid. A significant percentage of Bitcoin addresses are only 33 characters, and some bitcoin address length may be even shorter.

Every Bitcoin address stands for a number. These shorter addresses are valid simply because they stand for numbers that happen to start with zeroes, and when the zeroes are omitted, the encoded address gets shorter.

Several of the characters inside a Bitcoin address are used as a checksum so that typographical errors can be automatically found and rejected. The checksum also allows Bitcoin software to confirm that a 33-character (or shorter) address is in fact valid and isn’t simply an address with a missing character.

Purpose and opportunities [ edit ]

Transfer/receive transactions of Bitcoins (Cryptocurrency, BTC) can be performed via address like the work with e-mail messages. One person can create an unlimited number of addresses, increasing the anonymity level of the payments. When performing the next transaction with BTC a new address is often created (the funds are credited/debited within 1-2 hours). At the same time the private key pair is generated, providing access to the identifier and the ability to perform transactions with currency. They are stored in the wallet.dat file on the user’s computer.

Input conditions [ edit ]

In order to avoid errors when manually inputting the address, it is recommended to use the clipboard. Symbols register is considered when you manually input the address. In case of incorrect input Bitcoins are sent to the wrong address or the transaction is rejected. Last one is done automatically if the identifier contains symbols that are used as a checksum (for verification).

The probability that a mistyped address is accepted as being valid is, approximately 1 in 4.29 billion.

How to create Bitcoin address? [ edit ]

The address is created by generating of random numbers and performing specific mathematical operations. It does not require Internet connection and registration at Bitcoin, where it begins to be monitored. Thousands of addresses (including personalized) and keys thereto can be generated within 1 minute, for example, when using Vanitygen utility.

Creating bitcoin address can be done without an Internet connection and does not require any contact or registration with the Bitcoin network. It is possible to create large batches of addresses offline using freely available software tools. Generating batches of addresses is useful in several scenarios, such as e-commerce websites where a unique pre-generated address is dispensed to each customer who chooses a «pay with Bitcoin» option. Newer «HD wallets» can generate a «seed» token which can be used to allow untrusted systems (such as webservers) to generate an unlimited number of addresses without the ability to spend the bitcoins received.

Читайте также:  Доходность банка оценивается показателями

Transactions [ edit ]

Record of the BTC transfer from one address to another generates a transaction. It contains the hash of the previous transaction signed by the sender and Bitcoins recipients address. All information is sent to the Bitcoin network and after signatures verification transaction is accepted for processing.

Most Bitcoin wallets have a function to «sign» a message, proving the entity receiving funds with an address has agreed to the message. This can be used to, for example, finalise a contract in a cryptographically provable way prior to making payment for it.

Some services will also piggy-back on this capability by dedicating a specific address for authentication only, in which case the address should never be used for actual Bitcoin transactions. When you login to or use their service, you will provide a signature proving you are the same person with the pre-negotiated address.

It is important to note that these signatures only prove one receives with an address. Since Bitcoin transactions do not have a «from» address, you cannot prove you are the sender of funds.

Current standards for message signatures are only compatible with «version zero» bitcoin addresses (that begin with the number 1).

Bitcoin Address Validation [ edit ]

If you would like to validate a Bitcoin address in an application, it is advisable to use a method rather than to just check for string length, allowed characters, or that the address starts with a 1 or 3. Validation may also be done using open source code available in various languages or with an online validating tool.

Loss of Bitcoins [ edit ]

Loss of Bitcoins is possible in the following situations:

  • if the wallet is lost because of the hard drive failure,
  • when generating a new address, getting BTC on it and restoring the wallet from an earlier backup, where address is not yet created,
  • when sending Bitcoins to address that doesn’t have owner.

Multi-signature Bitcoin address [ edit ]

Addresses can be created that require a combination of multiple private keys. Since these take advantage of newer features, they begin with the newer prefix of 3 instead of the older 1. These can be thought of as the equivalent of writing a check to two parties — «pay to the order of somebody AND somebody else» — where both parties must endorse the check in order to receive the funds.

The actual requirement (number of private keys needed, their corresponding public keys, etc.) that must be satisfied to spend the funds is decided in advance by the person generating this type of address, and once an address is created, the requirement cannot be changed without generating a new address.

Address balances [ edit ]

Addresses are not wallets nor accounts, and do not carry balances. They only receive funds, and you do not send «from» an address at any time. Various confusing services and software display bitcoins received with an address, minus bitcoins sent in random unrelated transactions as an «address balance», but this number is not meaningful: it does not imply the recipient of the bitcoins sent to the address has spent them, nor that they still have the bitcoins received.

An example of bitcoin loss resulting from this misunderstanding is when people believed their address contained 3 BTC. They spent 0.5 Bitcoins and believed the address now contained 2.5 BTC when actually it contained zero. The remaining 2.5 Bitcoins was transferred to a change address which was not backed up and therefore lost. This has happened on a few occasions to users of Paper wallets.

Читайте также:  Прямые иностранные инвестиции нидерланды

«From» addresses [ edit ]

Bitcoin transactions do not have any kind of origin-, source- or «from» address.

Источник

Validate Bitcoin & Altcoin Wallet Address Types with Node.js

Cryptocurrency has done a lot to change the landscape of money and freedom on the internet. But adoption will still take lots more time and the usability of crypto is not 100% friendly to new users and adopters.

One of the scary parts of using cryptocurrency is sending currency from one wallet address to another can be incredibly unnerving. And this is especially true when dealing with large sums of currency. Wallet addresses are long strings of numbers and letters that are hard to understand and easy to mess up.

And all of the different types of cryptocurrencies have addresses that look very similar. So, a way to help with that problem is to verify that the address you’re working with is the type of coin you think it is.

To do this programmatically in Node.js, there is a great NPM package called wallet-address-validator that will make this super easy.

You can install the package with this command (you can also use yarn add ):

With the NPM package installed, you’re ready to work through the examples below.

Table Of Contents

Bitcoin Example

For demonstration purposes, let’s pretend you’re sending Bitcoin from one address to another. But you want to verify that the receiving address is a valid Bitcoin address.

The Node.js code would look like below:

We give the WAValidator.validate() function both the address we want to validate and the type of cryptocurrency it’s supposed to be ( «BTC» in this case). And it returns as either a true or false value.

Ethereum Example

Let’s try another example with an Ethereum address.

Below is what the code would look like:

This example is very similar to the Bitcoin one from before. But notice that we used the full name of the cryptocurrency ( «ethereum» ) instead of the coin’s symbol ( «ETH» ). Both will work when given to the WAValidator.validate() function.

Full List of Supported Cryptocurrencies

The npm package supports many more types of cryptocurrencies beyond just Bitcoin and Ethereum. Below is the full list of coins and the accepted strings to use in the validation function:

  • Auroracoin/AUR: «auroracoin» or «AUR»
  • Bankex/BKX: «bankex» or «BKX»
  • BeaverCoin/BVC: «beavercoin» or «BVC»
  • Biocoin/BIO: «biocoin» or «BIO»
  • Bitcoin/BTC: «bitcoin» or «BTC»
  • BitcoinCash/BCH: «bitcoincash» or «BCH»
  • BitcoinGold/BTG: «bitcoingold» or «BTG»
  • BitcoinPrivate/BTCP: «bitcoinprivate» or «BTCP»
  • BitcoinZ/BTCZ: «bitcoinz» or «BTCZ»
  • Callisto/CLO: «callisto» or «CLO»
  • Dash: «dash» or DASH
  • Decred/DCR: «decred» or «DCR»
  • Digibyte/DGB: «digibyte» or «DGB»
  • Dogecoin/DOGE: «dogecoin» or «DOGE»
  • Ethereum/ETH: «ethereum» or «ETH»
  • EthereumClassic/ETH: «ethereumclassic» or «ETC»
  • EthereumZero/ETZ: «etherzero» or «ETZ»
  • Freicoin/FRC: «freicoin» or «FRC»
  • Garlicoin/GRLC: «garlicoin» or «GRLC»
  • Hush/HUSH: «hush» or «HUSH»
  • Komodo/KMD: «komodo» or «KMD»
  • Litecoin/LTC: «litecoin» or «LTC»
  • Megacoin/MEC: «megacoin» or «MEC»
  • Monero/XMR: «monero» or «XMR»
  • Namecoin/NMC: «namecoin» or «NMC»
  • Nano/NANO: «NEO» or «NEO»
  • NeoGas/GAS: «neogas» or «GAS»
  • Peercoin/PPCoin/PPC: «peercoin» or «PPC»
  • Primecoin/XPM: «primecoin» or «XPM»
  • Protoshares/PTS: «protoshares» or «PTS»
  • Qtum/QTUM: «qtum» or «QTUM»
  • Raiblocks/XRB: «raiblocks» or «XRB»
  • Ripple/XRP: «ripple» or «XRP»
  • Snowgem/SNG: «snowgem» or «SNG»
  • Vertcoin/VTC: «vertcoin» or «VTC»
  • Votecoin/VTC: «votecoin» or «VOT»
  • Zcash/ZEC: «zcash» or «ZEC»
  • Zclassic/ZCL: «zclassic» or «ZCL»
  • ZenCash/ZEN: «zencash» or «ZEN»

Источник

Оцените статью