bitcoin-address-validator
bitcoin-address-validator copied to clipboard
PHP package to validate legacy, segwit, native segwit (bech32) and taproot Bitcoin addresses
Bitcoin Address Validator
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:
- bitwasp/bech32 by @afk11
- brooksyang/bech32m by BrooksYang
- linusu/bitcoin-address-validator by @LinusU
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