Includes the fix for the GR/EL VAT prefix bug that broke exemption for every Greek VAT number (in_array-on-values vs array_key_exists in CacheTaxManager/VatNumber, plus the missing use import in EuValidatorAdapter). Adds IMPROVEMENTS.txt with a checklist of features adopted from comparing against the vatchecker module (offline-fallback policy, failure logging, company-name check, configurable EU country list, per-product exclusion, GB/XI mapping, AJAX live validation, address-priority strategy). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
108 lines
3.1 KiB
Markdown
108 lines
3.1 KiB
Markdown
# EU VAT Number Validator
|
|
|
|
A simple and clean PHP class that validates EU VAT numbers against the central ec.europa.eu database (using the official europa API).
|
|
|
|

|
|
|
|
|
|
## The Problem
|
|
|
|
Validate VAT numbers might be difficult and if you use a validation pattern to check if the format is valid, you are never sure if the VAT registration number is still valid.
|
|
|
|
## The Solution
|
|
|
|
This [PHP VAT validator library](https://github.com/pH-7/eu-vat-validator) uses real-time data feeds from individual EU member states' VAT systems so you are sure of the validity of the number and avoid fraud with expired or wrong VAT numbers.
|
|
|
|
For example, this kind of validation can be very useful on online payment forms.
|
|
|
|
|
|
## Composer Installation
|
|
|
|
* Be sure PHP **[v7.1](https://www.php.net/releases/7_1_0.php) or higher** is installed.
|
|
|
|
* Install Composer (https://getcomposer.org).
|
|
|
|
* Then, include it in your project like belowe,
|
|
|
|
```bash
|
|
composer require ph-7/eu-vat-validator
|
|
```
|
|
|
|
* Then, include Composer's autoload (if not already done in your project)
|
|
|
|
```php
|
|
require_once 'vendor/autoload.php';
|
|
```
|
|
|
|
|
|
## Manual Installation (*the old-fashioned way*)
|
|
|
|
If you don't use Composer, you can install it without Composer by including the following
|
|
|
|
```php
|
|
require 'src/autoloader.php';
|
|
```
|
|
|
|
|
|
## How to Use
|
|
|
|
### Example
|
|
|
|
```php
|
|
use PH7\Eu\Vat\Validator;
|
|
use PH7\Eu\Vat\Provider\Europa;
|
|
|
|
$oVatValidator = new Validator(new Europa, '0472429986', 'BE');
|
|
|
|
if ($oVatValidator->check()) {
|
|
$sRequestDate = $oVatValidator->getRequestDate();
|
|
// Optional, format the date
|
|
$sFormattedRequestDate = (new DateTime)->format('d-m-Y');
|
|
|
|
echo 'Business Name: ' . $oVatValidator->getName() . '<br />';
|
|
echo 'Address: ' . $oVatValidator->getAddress() . '<br />';
|
|
echo 'Request Date: ' . $sFormattedRequestDate . '<br />';
|
|
echo 'Member State: ' . $oVatValidator->getCountryCode() . '<br />';
|
|
echo 'VAT Number: ' . $oVatValidator->getVatNumber() . '<br />';
|
|
} else {
|
|
echo 'Invalid VAT number';
|
|
}
|
|
```
|
|
|
|
|
|
## Optimization (Suggestion)
|
|
|
|
Depending of the use of this library, it could be handy to cache the result specifically for each specified VAT number.
|
|
|
|
|
|
## Requirements
|
|
|
|
* PHP 7.1 or higher
|
|
* [Composer](https://getcomposer.org)
|
|
* [SOAPClient](http://php.net/manual/en/class.soapclient.php) PHP Extension enabled
|
|
|
|
|
|
## About Me
|
|
|
|
I'm **[Pierre-Henry Soria](https://pierrehenry.be)**, a passionate Software Engineer and the creator of [pH7CMS](https://github.com/pH7Software/pH7-Social-Dating-CMS).
|
|
|
|
|
|
## Where to Contact Me?
|
|
|
|
You can by email at **pierrehenrysoria+github [[AT]] gmail [[D0T]] com**
|
|
|
|
|
|
## Wordpress Plugin
|
|
|
|
[VIES Validator WP plugin](https://wordpress.org/plugins/vies-validator/) uses also this [EU VAT Validation library](https://github.com/pH-7/eu-vat-validator/) for WooCommerce checkout, when you need to make sure that the VAT number is valid (that plugin was deleloped by [WpZen](https://wpzen.it), not me :smiley:).
|
|
|
|
|
|
## References
|
|
|
|
[VAT Information Exchange System (VIES)](http://ec.europa.eu/taxation_customs/vies/)
|
|
|
|
|
|
## License
|
|
|
|
Under [General Public License 3](http://www.gnu.org/licenses/gpl.html) or later.
|