Wpis z mikrobloga

#javascript #pytanie #pytaniedoeksperta #programowanie

Zapytałem chatGTP jak zrobić walidacje nipu na input w formularzu. Wyrzygał ten kod ale mimo zwrócenia mu uwagi że jest problem jak ktoś wpisze nip 0123456789 i 1234567890 bo go przepuszcza ciągle twierdzi że kod jest poprawny. Resztę nipów sprawdza bez problemu jeśli chodzi o walidacje.

Ktoś #pomocy

document.addEventListener('DOMContentLoaded', function () {
var submitButton = document.querySelector('button[name="confirm-addresses"]');
if (submitButton) {
submitButton.addEventListener('click', function (event) {
// Pobierz wartość pola NIP
var nipInput = document.getElementById('id_twoje_nip_field'); // Zastąp 'id_twoje_nip_field' właściwym identyfikatorem pola NIP

if (nipInput && nipInput.value !== '') {
// Sprawdź poprawność NIP
if (!validateNIP(nipInput.value)) {
// Zablokuj wysłanie formularza i wyświetl komunikat o błędzie
event.preventDefault();
alert('Numer NIP jest nieprawidłowy. Popraw go przed kontynuacją.');
}
}
});
}

function validateNIP(nip) {
var weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];
var sum = 0;

// Usuń wszystkie znaki niebędące cyframi
nip = nip.replace(/\D/g, '');

if (nip.length !== 10) {
return false;
}

for (var i = 0; i < 9; i++) {
sum += parseInt(nip.charAt(i)) * weights[i];
}

var remainder = sum % 11;
var controlNumber = parseInt(nip.charAt(9));

if (remainder === 10) {
remainder = 0;
}

return (remainder === controlNumber && remainder === sum % 11);
}
});
  • 7
@airflame: cytat:

Co do zasady wylicza on każdą z dziesięciu cyfr i mnoży przez odpowiednie wagi: 6, 5, 7, 2, 3, 4, 5, 6, 7. Uzyskany wynik sumuje się i dzieli przez 11. Reszta z tego dzielenia powinna być identyczna, jak ostatnia cyfra danego NIP-u.