Poprawne NIPy
5261040828 ✓ (poprawna suma kontrolna)
1234563218 ✓ (poprawna suma kontrolna)
7010416109 ✓ (poprawna suma kontrolna)
5261040567 ✓ (poprawna suma kontrolna)
Ministerstwo Finansów: 5260250274
Funkcja generująca poprawny NIP
function generateValidNIP(): string
{
// Wagi dla 9 pierwszych cyfr
$weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];
// Generuj 9 losowych cyfr
$digits = [];
for ($i = 0; $i < 9; $i++) {
$digits[] = rand(0, 9);
}
// Oblicz sumę kontrolną
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += $digits[$i] * $weights[$i];
}
$checksum = $sum % 11;
// Jeśli suma kontrolna = 10, generuj ponownie
if ($checksum == 10) {
return generateValidNIP();
}
// Dodaj cyfrę kontrolną
$digits[] = $checksum;
return implode('', $digits);
}
// Przykład użycia:
$validNIP = generateValidNIP();
echo $validNIP; // np. 5261040828
Walidacja NIP-u
function validateNIP(string $nip): bool
{
// Usuń ewentualne myślniki
$nip = str_replace('-', '', $nip);
// Sprawdź długość
if (strlen($nip) !== 10 || !ctype_digit($nip)) {
return false;
}
$weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += (int)$nip[$i] * $weights[$i];
}
$checksum = $sum % 11;
return $checksum == 10 ? false : $checksum == (int)$nip[9];
}
// Test:
var_dump(validateNIP('0987654321')); // false ❌
var_dump(validateNIP('5261040828')); // true ✓