kielabokkie / bitcoin-address-validator
Validate legacy, segwit, native segwit (bech32) and taproot Bitcoin addresses
Fund package maintenance!
kielabokkie
Installs: 154 479
Dependents: 0
Suggesters: 0
Security: 0
Stars: 38
Watchers: 2
Forks: 8
Open Issues: 2
Requires
- php: ^7.3|^7.4|^8.0|^8.1
- ext-bcmath: *
Requires (Dev)
- phpunit/phpunit: ^7.5|^8.0|^9.0
README
Validate legacy, segwit, native segwit (bech32), and taproot Bitcoin addresses.
Requirements
- PHP >= 7.3
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