Cake\Localized\Validation\RuValidation::vatin PHP Method

vatin() public static method

VAT identification number (Tax Identification Number, ИНН)
public static vatin ( string $check ) : boolean
$check string The value to check.
return boolean Success.
    public static function vatin($check)
    {
        $pattern = '/^\\d{10}|\\d{12}$/';
        if (!preg_match($pattern, $check)) {
            return false;
        }
        $digits = str_split($check);
        // getting digits & positions from id string
        $calculatedChecksum = null;
        if (strlen($check) === 10) {
            // legal person
            $checksum = array_pop($digits);
            $tbNum = [2, 4, 10, 3, 5, 9, 4, 6, 8];
            $calculatedChecksum = array_sum(array_map(function ($value, $multiplier) {
                return $value * $multiplier;
            }, $tbNum, $digits)) % 11 % 10;
        } else {
            // human person
            $checksum = join('', array_slice($digits, -2));
            $digits = array_slice($digits, 0, -1);
            $tbNum = [[7, 2, 4, 10, 3, 5, 9, 4, 6, 8], [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]];
            $sum = [0, 0];
            foreach ($tbNum as $key => $multipliers) {
                $sum[$key] = array_sum(array_map(function ($value, $multiplier) {
                    return $value * $multiplier;
                }, $multipliers, $digits)) % 11 % 10;
            }
            $calculatedChecksum = join('', $sum);
        }
        return (int) $checksum === (int) $calculatedChecksum;
    }

Usage Example

Beispiel #1
0
 /**
  * test vatin method of RuValidation
  *
  * @return void
  */
 public function testVatin()
 {
     $this->assertTrue(RuValidation::vatin('7710140679'));
     $this->assertTrue(RuValidation::vatin('772807592828'));
     $this->assertFalse(RuValidation::vatin('12345'));
     // invalid checksums
     $this->assertFalse(RuValidation::vatin('7710140670'));
     $this->assertFalse(RuValidation::vatin('772807592837'));
 }