kielabokkie/bitcoin-address-validator

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

v2.2.0 2023-09-28 08:27 UTC

This package is auto-updated.

Last update: 2024-03-28 09:42:44 UTC


README

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