Calcolatore Algoritmo di Luhn - Convalida Carta di Credito e IMEI
Calcolatore gratuito Luhn mod 10 per la convalida delle carte di credito, controlli IMEI e verifica dell'identità. Convalida istantaneamente numeri o genera dati di test online.
Calcolatore dell'Algoritmo di Luhn
Verifica se il tuo numero supera la convalida Luhn mod 10
Documentazione
Che cos'è l'algoritmo di Luhn?
L'algoritmo di Luhn, chiamato anche algoritmo mod 10, è una formula che verifica se una stringa di cifre potrebbe essere un numero identificativo valido. Viene usato per rilevare errori di digitazione nei numeri delle carte di credito, nei numeri IMEI dei telefoni e in altri codici identificativi prima che causino un errore. L'ingegnere IBM Hans Peter Luhn descrisse il metodo in un brevetto depositato nel 1954.
L'algoritmo non dimostra che un numero sia reale o attivo. Conferma soltanto che le cifre seguono il modello previsto. Un numero di carta può superare il controllo di Luhn ed essere comunque falso, scaduto o privo di fondi.
Come calcolare il checksum di Luhn
Il controllo si applica alle cifre di un numero, lette da destra a sinistra.
- Partendo dalla seconda cifra da destra, raddoppiare una cifra ogni due.
- Se il raddoppio di una cifra produce un numero maggiore di 9, sottrarre 9 al risultato. (È lo stesso che sommare le due cifre del risultato, quindi 16 diventa 1 + 6 = 7, oppure, in modo equivalente, 16 − 9 = 7.)
- Sommare tutte le cifre: quelle raddoppiate, dopo la correzione, e quelle lasciate invariate.
- Se la somma totale è divisibile per 10, il numero è valido. In caso contrario, non è valido.
Quando un'azienda emette nuovi numeri identificativi, applica gli stessi passaggi al contrario. Sceglie tutte le cifre tranne l'ultima, esegue il controllo e poi sceglie l'ultima «cifra di controllo» in modo che il totale sia divisibile per 10.
Esempio svolto: convalida di un numero di carta
Consideriamo il numero di prova 4532015112830366.
- Cifre da destra a sinistra: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Raddoppiare una cifra ogni due: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Sottrarre 9 a ogni risultato superiore a 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Sommarle: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 è divisibile per 10, quindi il numero è valido.
Esempio svolto: un numero non valido
Consideriamo 490154203237517, un numero di 15 cifre nel formato usato dai numeri IMEI.
Applicando gli stessi passaggi si ottiene una somma di 59. Poiché 59 non è divisibile per 10, questo numero è non valido.
Per trasformarlo in un numero valido, è sufficiente modificare l'ultima cifra. Provando ogni possibile cifra finale, si vede che 8 porta la somma a 60, che è divisibile per 10. Quindi 490154203237518 è un numero di Luhn valido, mentre ogni altra cifra finale da 0 a 9 (tranne 8) produce un numero non valido.
Come usare questo calcolatore
Il calcolatore dispone di due modalità, selezionabili con i pulsanti Azione.
Convalida controlla un numero mentre viene digitato. Non è necessario premere alcun pulsante. Il risultato appare non appena il campo contiene cifre, mentre una spiegazione passo per passo sotto di esso elenca ogni cifra, il valore che contribuisce dopo il raddoppio e la riduzione, e la somma totale.
Genera crea un numero che supera il controllo. Le cifre già presenti nel campo vengono mantenute come inizio del nuovo numero. Il calcolatore completa il resto con cifre casuali e aggiunge la cifra di controllo. Il risultato ha 16 cifre, la lunghezza tipica di un numero di carta di pagamento, a meno che le cifre inserite non siano già 16 o più; in tal caso il risultato ha una cifra in più rispetto a quelle inserite.
Spazi, trattini e punti nell'input vengono ignorati, quindi «4532 0151 1283 0366» e «4532-0151-1283-0366» vengono letti allo stesso modo delle sole cifre. Qualsiasi altro carattere, come una lettera, viene rifiutato con un messaggio di errore.
Dove viene usato l'algoritmo di Luhn
- Carte di pagamento. Visa, Mastercard, American Express e altri circuiti costruiscono i numeri delle carte in modo che il numero completo superi il controllo di Luhn. I moduli di pagamento possono usare questo controllo per rilevare una cifra digitata erroneamente prima di contattare il gestore dei pagamenti.
- Numeri IMEI. L'identificativo di 15 cifre assegnato ai telefoni e ad altri dispositivi cellulari include una cifra di controllo di Luhn.
- Numeri di assicurazione sociale canadesi. Il SIN di 9 cifre usa lo stesso controllo.
- National Provider Identifier (NPI) statunitense. I professionisti sanitari negli Stati Uniti ricevono un NPI di 10 cifre, convalidato mediante un controllo basato sull'algoritmo di Luhn.
Cosa non rileva l'algoritmo di Luhn
L'algoritmo rileva sempre una singola cifra digitata erroneamente, indipendentemente dalla cifra o dalla posizione. Rileva anche ogni scambio tra cifre adiacenti, come digitare «39» invece di «93», tranne un caso specifico: lo scambio di un 0 e un 9 adiacenti, come trasformare «09» in «90».
Inoltre non rileva tre errori «gemelli», in cui una coppia ripetuta di cifre viene sostituita da un'altra coppia ripetuta: 22 letto come 55, 33 letto come 66 e 44 letto come 77. Poiché queste lacune sono note e circoscritte, il controllo di Luhn è affidabile per rilevare i normali errori di digitazione, ma non viene considerato un sistema completo di rilevamento degli errori.
Luhn non è un controllo di sicurezza
Luhn è stato progettato per rilevare errori accidentali di inserimento dei dati, non le frodi. Un numero che supera il controllo è soltanto formalmente corretto dal punto di vista matematico. La sicurezza effettiva dei pagamenti dipende da altri livelli aggiunti dopo il controllo di Luhn, come il codice CVV della carta, la verifica dell'indirizzo e l'autenticazione 3-D Secure. Luhn è semplicemente il primo filtro, il meno costoso, applicato prima di questi controlli più lenti.
Convalidare un numero in JavaScript
1function isValidLuhn(number) {
2 const digits = number.replace(/\D/g, '').split('').map(Number);
3 if (digits.length === 0) return false;
4
5 let sum = 0;
6 let doubleDigit = false;
7 for (let i = digits.length - 1; i >= 0; i--) {
8 let d = digits[i];
9 if (doubleDigit) {
10 d *= 2;
11 if (d > 9) d -= 9;
12 }
13 sum += d;
14 doubleDigit = !doubleDigit;
15 }
16 return sum % 10 === 0;
17}
18Il controllo dell'input vuoto è importante: una stringa vuota ha una somma delle cifre pari a 0 e 0 è
divisibile per 10, quindi senza il controllo la funzione considererebbe erroneamente
valido un input vuoto. Per trovare una cifra di controllo invece di verificarne una, eseguire lo stesso ciclo
sulle cifre precedenti la cifra di controllo, iniziando però a raddoppiare dall'ultima di esse,
quindi calcolare (10 - sum % 10) % 10.
Domande frequenti
A cosa serve l'algoritmo di Luhn?
Verifica se un numero identificativo, come un numero di carta di credito, un numero IMEI o un SIN canadese, è coerente al proprio interno. Rileva cifre digitate erroneamente o scambiate prima che causino un errore di elaborazione.
Quanto è accurato l'algoritmo di Luhn nel rilevare gli errori?
Rileva ogni singola cifra digitata erroneamente e quasi tutti i casi di scambio tra due cifre adiacenti. L'unico scambio che non rileva è quello tra 0 e 9 adiacenti. Inoltre non rileva tre specifiche sostituzioni «gemelle»: 22 al posto di 55, 33 al posto di 66 e 44 al posto di 77.
Un numero Luhn valido significa che la carta è reale?
No. Il controllo conferma soltanto che le cifre corrispondono al modello previsto. Non dice nulla sul fatto che la carta esista, sia attiva o disponga di fondi. Le aziende aggiungono controlli separati, come il codice CVV, per verificarlo.
Il controllo di Luhn può essere eseguito senza un computer?
Sì. Richiede solo raddoppi, sottrazioni e addizioni, quindi può essere eseguito a mano o con una semplice calcolatrice. Questo rientrava nel progetto originale, pensato per l'epoca delle schede perforate, prima che i computer digitali diventassero comuni.
I numeri generati sono numeri di carta reali?
No. Il generatore produce soltanto stringhe di cifre che superano il controllo di Luhn. Sono destinate al collaudo dei moduli di input. Nessuna banca le ha emesse e non possono essere usate per pagare qualcosa.
Perché si chiama algoritmo mod 10?
Perché l'ultimo passaggio verifica se la somma è divisibile esattamente per 10, cosa che in matematica si scrive «somma mod 10 = 0». «Mod» è l'abbreviazione di modulo, il resto che rimane dopo una divisione.
Chi ha inventato l'algoritmo di Luhn?
Hans Peter Luhn, ingegnere presso IBM, lo descrisse in una domanda di brevetto depositata nel 1954 (concessa nel 1960 come brevetto statunitense 2.950.048). È noto anche per i primi studi sull'indicizzazione computerizzata dei testi.