diff --git a/public/register.html b/public/register.html
index 6cd42e1..96ae7c0 100644
--- a/public/register.html
+++ b/public/register.html
@@ -437,17 +437,32 @@
}
// --- P.IVA Lookup ---
+ function validaFormatoPiva(v) {
+ // Controllo cifra di controllo P.IVA italiana
+ if (!/^\d{11}$/.test(v)) return false;
+ let s = 0;
+ for (let i = 0; i < 10; i++) {
+ let n = parseInt(v[i]);
+ if (i % 2 === 1) { n *= 2; if (n > 9) n -= 9; }
+ s += n;
+ }
+ return (10 - (s % 10)) % 10 === parseInt(v[10]);
+ }
+
function lookupPiva(val) {
clearTimeout(pivaLookupTimer);
val = val.replace(/\s/g, '');
const statusEl = document.getElementById('piva-status');
- if (val.length !== 11) {
+ if (val.length < 11) { pivaData = null; statusEl.innerHTML = ''; return; }
+ if (val.length === 11 && !validaFormatoPiva(val)) {
pivaData = null;
- statusEl.innerHTML = '';
+ statusEl.className = 'lookup-status err';
+ statusEl.innerHTML = ' P.IVA non valida (cifra di controllo errata)';
return;
}
- statusEl.className = 'lookup-status loading';
- statusEl.innerHTML = ' Ricerca azienda...';
+ // Formato OK — mostra subito conferma, poi prova lookup
+ statusEl.className = 'lookup-status ok';
+ statusEl.innerHTML = ' P.IVA valida — ricerca dati azienda...';
pivaLookupTimer = setTimeout(async () => {
try {
const res = await fetch(api.baseUrl + '/onboarding/lookup-piva', {
@@ -462,12 +477,13 @@
statusEl.innerHTML = ' ' + data.data.company_name;
} else {
pivaData = null;
- statusEl.className = 'lookup-status';
- statusEl.innerHTML = ' Azienda non trovata, potrai inserire i dati manualmente';
+ statusEl.className = 'lookup-status ok';
+ statusEl.innerHTML = ' P.IVA valida — inserisci i dati aziendali nel passo successivo';
}
} catch {
pivaData = null;
- statusEl.innerHTML = '';
+ statusEl.className = 'lookup-status ok';
+ statusEl.innerHTML = ' P.IVA valida — inserisci i dati aziendali nel passo successivo';
}
}, 800);
}