Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Latest Stable Version GitHub stars Total Downloads GitHub Workflow Status Type Coverage License

Taxpayer Identification Number (TIN) Validator


A library to validate TIN numbers for individuals. This is based on a Java library, this is why the code does not reflect best practices in PHP (yet).

Supported countries:

  • Austria (AT)
  • Belgium (BE)
  • Bulgaria (BG)
  • Croatia (HR)
  • Cyprus (CY)
  • Czech Republic (CZ)
  • Denmark (DK)
  • Estonia (EE)
  • Finland (FI)
  • France (FR)
  • Germany (DE)
  • Greece (GR) - only size
  • Hungary (HU)
  • Ireland (IE)
  • Italy (IT)
  • Latvia (LV) - no check digit
  • Lithuania (LT)
  • Luxembourg (LU)
  • Malta (MT) - no check digit
  • Netherlands (NL)
  • Poland (PL)
  • Portugal (PT)
  • Romania (RO) - no check digit
  • Slovakia (SK) - only structure
  • Slovenia (SI)
  • Spain (ES)
  • Sweden (SE)
  • United Kingdom (UK) - only structure

If your country is not there, feel free to open an issue with your country code, and a link to the specification. Ideally, you can provide a pull request with the algorithm and the tests.


  • PHP >= 8.1

Usage & API

To simply check the validity of a TIN number:


include __DIR__ . '/vendor/autoload.php';

use loophp\Tin\TIN;

$bool = TIN::fromSlug('be71102512345')->isValid();

If you want to get the reason why a number is invalid, you can use


include __DIR__ . '/vendor/autoload.php';

use loophp\Tin\TIN;
use loophp\Tin\Exception\TINException;

try {
} catch (TINException $e) {
    // do something with the exception.


composer require loophp/tin

Code quality, tests and benchmarks

Every time changes are introduced into the library, Github run the tests and the benchmarks.

The library has tests written with PHPSpec. Feel free to check them out in the spec directory. Run composer phpspec to trigger the tests.

Before each commit some inspections are executed with GrumPHP, run ./vendor/bin/grumphp run to check manually.

PHPInfection is used to ensure that your code is properly tested, run composer infection to test your code.




We warmly welcome your contributions by submitting pull requests. Our team is highly responsive and will gladly guide you through the entire process, from the initial submission to the final resolution.

If, for any reason, you are unable to contribute directly to the code but still wish to support our efforts, consider sponsoring us. This is a reliable and meaningful way to express your appreciation for the countless hours we've dedicated to this project.

Support our contributors by sponsoring them on Github.