Ostatnio zastanawiałem się dlaczego presta nie ma walidacji NIP i że muszą być jakieś specjalne moduły pod to pisane. Doszedłem do wniosku że zrobię walidację w pliku prestashop. Oby komuś pomogło z debilami co wpisują 111111111 itd.
Zmiana w pliku: /classes/Validate.php
public static function isVatNumber($vat_number)
{
// Sprawdzamy, czy numer NIP składa się z 10 cyfr
if (!preg_match('/^[0-9]{10}$/', $vat_number)) {
return false;
}
// Przypisujemy numer NIP do zmiennej
$nip = str_split($vat_number);
// Sprawdzamy, czy NIP nie jest sekwencją tych samych cyfr
if (preg_match('/^(\d)\1*$/', $vat_number)) {
return false;
}
// Definiujemy wagi dla każdej cyfry NIP
$weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];
// Obliczamy sumę kontrolną
$sum = 0;
foreach ($weights as $i => $weight) {
$sum += $nip[$i] * $weight;
}
// Sprawdzamy, czy ostatnia cyfra jest zgodna z obliczoną sumą
return ($sum % 11 === (int)$nip[9]);
}