Skip to content

PHP package to validate legacy, segwit, native segwit (bech32) and taproot Bitcoin addresses

License

Notifications You must be signed in to change notification settings

kielabokkie/bitcoin-address-validator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bitcoin Address Validator

Author Build Packagist Version Software License Total Downloads

Validate legacy, segwit, native segwit (bech32), and taproot Bitcoin addresses.

Requirements

  • PHP >= 7.3
PHP Package Version
7.x v1.0
8.x v2.0+

Please note that taproot addresses are supported from v2.1 of this package.

Installation

Install the package via composer:

composer require kielabokkie/bitcoin-address-validator

Usage

First you instantiate the validator class:

$addressValidator = new \Kielabokkie\Bitcoin\AddressValidator;

Validate any kind of address (legacy, segwit, native segwit and taproot):

$addressValidator->isValid('1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i');

Legacy (P2PKH) address:

$addressValidator->isPayToPublicKeyHash('1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i');

Segwit (P2SH) address:

$addressValidator->isPayToScriptHash('3ALJH9Y951VCGcVZYAdpA3KchoP9McEj1G');

Native segwit (bech32) address:

$addressValidator->isBech32('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4');

Taproot (P2TR) address:

$addressValidator->isPayToTaproot('bc1pveaamy78cq5hvl74zmfw52fxyjun3lh7lgt44j03ygx02zyk8lesgk06f6');

Testnet

By default, the validator only passes mainnet addresses as valid. If you would like to validate both mainnet and testnet addresses you can use method chaining:

// Both valid
$addressValidator->includeTestnet()->isBech32('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4');
$addressValidator->includeTestnet()->isBech32('tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx');

If you want to validate only testnet addresses you can do that as follows:

// Invalid
$addressValidator->onlyTestnet()->isBech32('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4');
// Valid
$addressValidator->onlyTestnet()->isBech32('tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx');

Testing

This package is tested against the test data of the official bitcoin/bitcoin repo. If you come across an address that is not validated correctly please open an issue for it.

Run the tests with:

composer test

Credits

This package is based on the following packages and uses a lot of their code:

All credit goes to the original authors.

Donate

Did this package made you lots of money, save you some time or just sparked joy?

A donation would be much appreciated: 32vtWJSomccxQ6y1tgSwSHXN5PChpdYy27