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;
}