Numeri di carta di test: a che cosa serve davvero l'algoritmo di Luhn, e che cosa non può dirti
Pubblicato il 05/08/2026 · 15 min di lettura · Strumenti per sviluppatori
Daniel Okonkwo — Sviluppatore front-end e redattore Tech presso OneKitly
Performance web · Formati di file
Verificato su 4 fonti
La formula di Luhn è uno schema di cifra di controllo per il quale Hans Peter Luhn depositò un brevetto nel gennaio 1954, concesso nell'agosto 1960 come US 2.950.048 con il titolo Computer for Verifying Numbers, adottato da allora come cifra di controllo del sistema di numerazione delle carte normato dalla ISO/IEC 7812-1. Lavora da destra: raddoppia una cifra su due, sottrai nove a ogni risultato superiore a nove, somma tutto, e un numero valido dà un totale divisibile per dieci. Su 4242 4242 4242 4242 gli otto 4 diventano ciascuno 8 e gli otto 2 restano, il che dà 64 più 16, cioè 80: divisibile per dieci, il numero passa. È tutto l'algoritmo e tutta la garanzia. Esaurire i casi mostra esattamente che cosa ti compra: tutte le 144 sostituzioni di una cifra su quel numero vengono rilevate, e lo scambio di due cifre adiacenti viene rilevato in 88 dei 90 casi possibili, con le due eccezioni 09 contro 90. Gli sfuggono anche gli errori gemelli 22 contro 55, 33 contro 66 e 44 contro 77. È un controllo di battitura, niente di più. Non è una misura di sicurezza, non può esserlo, e un numero che la supera non dice nulla su se un conto esista, sia coperto o verrebbe autorizzato: lo sa solo l'emittente, e solo quando il tuo fornitore glielo chiede durante l'autorizzazione. Eseguire l'output di questo generatore conferma la meccanica: 120 000 numeri su sei circuiti, ognuno valido secondo Luhn, con lunghezze corrette e codici di sicurezza della larghezza giusta. Ciò che ti compra è un modo per esercitare la validazione lato client del tuo modulo. Per provare davvero un'integrazione di pagamento, usa i numeri che il tuo fornitore documenta: Stripe, Adyen e PayPal pubblicano ciascuno i propri, progettati per far scattare codici di rifiuto precisi. Un numero generato che comincia con 4242 non è il 4242 4242 4242 4242 di Stripe, e non ti insegnerà nulla.
Luhn è una somma di controllo per intercettare i refusi, brevettata nel 1960, ed è tutto il suo lavoro. Un numero che la supera non ti dice nulla di alcun conto. Per provare un'integrazione di pagamento ti servono i numeri pubblicati dal tuo fornitore, non uno generato.
L'algoritmo, svolto perché tu possa verificarlo a mano
Parti dalla cifra più a destra, che è la cifra di controllo, e lasciala stare. Vai verso sinistra e raddoppia una cifra su due — quella immediatamente a sinistra della cifra di controllo, poi una sì e una no. Ogni volta che il raddoppio supera nove, sottraigli nove, il che equivale a sommare le due cifre del valore raddoppiato. Ora somma tutte le cifre del numero, raddoppiate o no. Se il totale è divisibile per dieci, il numero passa.
Prendi 4242 4242 4242 4242, il numero di test più pubblicato al mondo. Sedici cifre, quindi le posizioni da raddoppiare sono la prima, la terza, la quinta e così via da sinistra: tutti e otto i 4. Ogni 4 raddoppiato fa 8, che non supera nove, quindi non si sottrae nulla. Gli otto 2 restano intatti. La somma è otto volte 8, cioè 64, più otto volte 2, cioè 16, per un totale di 80. Ottanta diviso dieci fa otto senza resto, quindi il numero è valido. Un secondo esempio a cifre miste, semmai la ripetizione nascondesse il metodo: 4539 1488 0343 6467 dà la sequenza 8, 5, 6, 9, 2, 4, 7, 8, 0, 3, 8, 3, 3, 4, 3, 7, che pure somma 80.
Produrre un numero valido invece di verificarne uno è la stessa aritmetica al contrario. Prendi le cifre che vuoi senza l'ultima, calcola la somma come sopra trattando la posizione mancante come cifra di controllo, e la cifra di controllo è ciò che porta il totale al successivo multiplo di dieci. Per 424242424242424 la risposta è 2. Per 37828224631000, un corpo Amex di quattordici cifre, è 5, ed ecco come 378282246310005 diventa il numero di test Amex pubblicato. È tutto quello che fa un generatore.
Che cosa intercetta, per esaurimento dei casi
Ciò che di solito si afferma su Luhn è che intercetta tutti gli errori di una cifra e quasi tutte le trasposizioni di cifre adiacenti. Entrambe le metà si possono verificare per esaurimento invece che crederle. Cambia una cifra di 4242 4242 4242 4242 in ciascuno degli altri nove valori, in ciascuna delle sedici posizioni: tutti i 144 numeri risultanti falliscono la verifica. Quella parte è completa: qualsiasi singola cifra digitata male viene intercettata, sempre.
La metà delle trasposizioni è quasi completa e l'eccezione è precisa. Costruisci un numero valido che finisca con ciascuna delle novanta coppie ordinate di cifre diverse, scambia quelle due cifre e ricontrolla: ottantotto dei novanta scambi rompono la somma di controllo. I due che sopravvivono sono 09 che diventa 90 e 90 che diventa 09. La ragione è aritmetica e non misteriosa: raddoppiare 0 dà 0 e raddoppiare 9 dà 18, che si riduce a 9, quindi quelle due cifre contribuiscono allo stesso modo in qualsiasi posizione, e scambiarle non cambia nulla. C'è un secondo punto cieco, meno citato, nella stessa famiglia: gli errori gemelli, quando una coppia raddoppiata viene digitata al posto di un'altra coppia raddoppiata. Digitare 55 per 22, 66 per 33 o 77 per 44 lascia il totale invariato e passa.
Per contro, nota che cosa la verifica non tenta. Non ha segreto, né chiave, né stato. Chiunque calcola un numero valido in un secondo, e il novanta per cento delle stringhe di sedici cifre che falliscono la verifica è l'unica cosa che esclude. È il progetto corretto per ciò a cui serve: intercettare un cliente che ha digitato male una cifra della propria carta, prima che tu spenda un giro di rete e una commissione per scoprirlo. Non ha mai avuto lo scopo di stabilire che una carta esista, e non le si può far fare.
Il numero, il conto e l'autorizzazione sono tre cose diverse
Un numero di carta ha una struttura. Le prime cifre sono l'identificativo dell'emittente, che designa il circuito e l'istituto e si assegna secondo la ISO/IEC 7812-1; le cifre successive sono l'identificativo di conto assegnato dall'emittente; l'ultima è la cifra di controllo. Struttura è tutto ciò che è. Sapere che un numero comincia con un prefisso emittente valido e finisce con una cifra di controllo corretta ti dice che la stringa è ben formata, allo stesso modo in cui un codice postale scritto correttamente non dice nulla su se lì ci sia una casa.
Se dietro il numero ci sia un conto, se sia aperto, se abbia margine per l'importo, se le regole di rischio dell'emittente consentiranno questo esercente in quel giorno: nulla di ciò sta nelle cifre. Vi risponde una richiesta di autorizzazione: il tuo fornitore manda i dati al circuito, il circuito li instrada all'emittente, e l'emittente risponde con un'approvazione o un codice di rifiuto. Quel giro è l'unica cosa che sa. È anche l'unica cosa che può rifiutare per fondi insufficienti, per carta dichiarata smarrita, o perché il codice di sicurezza non corrispondeva: cioè esattamente la gamma di esiti che la tua cassa deve gestire bene.
È per questo che i fornitori pubblicano numeri di test invece di dirti di generarne di tuoi. Stripe documenta un numero preciso per circuito e un ulteriore insieme che produce fallimenti con nome, così puoi scrivere un test che verifichi che la tua pagina mostri il messaggio giusto quando una carta viene rifiutata per fondi insufficienti e non per codice di sicurezza errato. Adyen pubblica il proprio elenco e dice chiaramente che quei numeri funzionano solo con la sua piattaforma di test e non funzionano su altre piattaforme. PayPal pubblica dati di carta per la sua sandbox. Ogni elenco è legato all'ambiente di test di un fornitore, ed esiste perché la cosa utile da provare non è se una stringa somigli a una carta, ma se il tuo codice gestisce ciò che torna.
Che cosa produce questo generatore, verificato sugli intervalli pubblicati
La meccanica è solida. Ventimila numeri per circuito su sei circuiti, 120 000 in tutto, e tutti superano il controllo di Luhn: nemmeno un fallimento, ripetuto dopo ogni modifica agli intervalli. Ogni prefisso prodotto cade dentro un intervallo che il circuito pubblica davvero. Le lunghezze seguono il circuito: sedici cifre per Mastercard, Discover e JCB, quindici per American Express, quattordici per l'intervallo Diners usato, e Visa a sedici cifre nove volte su dieci, con tredici e diciannove una volta su venti ciascuna, perché Visa emette tutti e tre e un modulo che accetta solo sedici cifre ha un difetto che nessun dato di test uniforme ti mostrerà. Anche le larghezze del codice di sicurezza sono giuste: tre cifre ovunque tranne American Express, dove sono quattro.
Mastercard è l'intervallo che vale la pena capire, per come viene estratto più che per qualcosa che gli manchi. Il circuito è stato 51-55 per decenni; dal 2017 emette anche nella serie 2, una fascia che va da 222100 a 272099 e che gli esercenti hanno dovuto accettare da metà 2017. Un elenco piatto di prefissi non può esprimerlo — sono cinquecentomila prefissi a sei cifre — quindi ogni intervallo è tenuto come una fascia numerica inclusiva e il prefisso viene estratto al suo interno. I due intervalli sono estratti in parti uguali, metà e metà, ed è una decisione di dati di test, non una fotografia del mercato. Pesata sulle carte in circolazione, la serie 2 sarebbe qualche punto percentuale, e con l'impostazione predefinita di cinque carte uno sviluppatore non ne vedrebbe mai una: esattamente il difetto da evitare. Ventimila Mastercard generate si dividono 49,7 contro 50,3 fra i due. Se il tuo schema di validazione è stato scritto prima del 2017, o a partire dall'output di un generatore anziché dagli intervalli pubblicati dal circuito, rifiuta una vera carta della serie 2 e lo scopri quando te lo dice un cliente.
Un prefisso personalizzato non scavalca più il circuito, perché il circuito non viene più preso dal selettore: viene letto dalle cifre. Digita 51 e ottieni una Mastercard, qualunque cosa dica il selettore di tipo. Digita un solo 9, una prima cifra che la ISO/IEC 7812-1 riserva all'assegnazione nazionale e che non appartiene ad alcun circuito, e la carta torna etichettata come BIN sconosciuto su una faccia grigia neutra, non travestita da Visa. Un prefisso corto rivendica un intervallo solo se ogni numero che potrebbe produrre ci cade dentro: 51 è una Mastercard, un 5 da solo no, perché 50 e da 56 a 59 non lo sono — quindi un BIN digitato a metà si legge come sconosciuto, che è la risposta onesta mentre il campo si sta ancora riempiendo. Il circuito letto dalle cifre comanda poi il resto della carta: lunghezza e larghezza del codice di sicurezza seguono il prefisso e non il menu, così un BIN Amex digitato dà quindici cifre e un codice a quattro. L'elenco a tendina dei prefissi già pronti non ha mai avuto questo problema: sceglierne uno fissa il circuito di conseguenza.
Un'ultima cosa sull'elenco a tendina dei prefissi, che è la parte più utile dello strumento e anche la più facile da fraintendere. Gli undici prefissi offerti — 4242, 4000, 5555, 5200, 3782, 6011, 3566, 3622, 4111, 5100 e 4032 — sono le cifre iniziali dei numeri che i fornitori pubblicano come dati di test, non quelli di banche vere, e la pagina lo dice. Ma un numero generato che comincia per 4242 non è la carta di test di Stripe. La carta di test di Stripe è esattamente 4242 4242 4242 4242, una stringa precisa; il generatore produce un altro numero, casuale, valido secondo Luhn, con le stesse quattro cifre iniziali, e l'ambiente di test di un fornitore riconosce il numero documentato e non il prefisso. Un prefisso scelto fissa anche la lunghezza a quella canonica del circuito: un 4242 torna sempre a sedici cifre e mai nelle forme più rare di Visa a tredici o diciannove. Usa l'elenco per rendere plausibili i tuoi dati di test. Usa la documentazione del fornitore per farli funzionare.
| Circuito | Che cosa genera lo strumento | Che cosa emette il circuito |
|---|---|---|
| Visa | Prefisso 4; 16 cifre nel 90 % dei casi, 13 e 19 al 5 % ciascuna, codice a 3 cifre | Prefisso 4; 16 cifre è la norma, esistono anche 13 e 19 |
| Mastercard | 51-55 e 222100-272099, estratti metà e metà | Da 51 a 55 e la serie 2, da 222100 a 272099, in circolazione dal 2017 |
| American Express | 34 e 37, 15 cifre, codice a 4 cifre | 34 e 37, 15 cifre, codice a 4 cifre — completo e corretto |
| Discover | 6011, 65, 644-649 e 622126-622925, pesati 40/30/20/10 | 6011 e 65, più le fasce da 644 a 649 e da 622126 a 622925 |
| JCB | Qualsiasi prefisso da 3528 a 3589 | Tutto l'intervallo 3528-3589 |
| Diners Club | 36, 300-305, 38 e 39, sempre 14 cifre | 36, da 38 a 39 e la fascia da 300 a 305; circolano anche forme a 16 cifre |
Domande frequenti
- Un numero che supera la verifica di Luhn significa che la carta è vera?
- No, nemmeno un po'. Luhn è una somma di controllo senza chiave né segreto: chiunque calcola un numero valido in meno di un secondo, e circa una stringa di sedici cifre su dieci passa per caso. Ciò che esclude sono le nove su dieci che non passano: un filtro per i refusi e nient'altro. Se dietro il numero ci sia un conto, se sia aperto e se autorizzerebbe un dato importo sono domande a cui solo l'emittente può rispondere, tramite una richiesta di autorizzazione instradata dal tuo fornitore di pagamento. È per questo che la verifica si fa nel browser prima di inviare la richiesta, e non al suo posto.
- Posso usare un numero generato per provare la mia integrazione di pagamento?
- Per la metà lato client sì: un numero ben formato, della lunghezza giusta e con una cifra di controllo valida, è esattamente ciò che serve per vedere se il tuo modulo lo accetta, lo raggruppa a quattro a quattro, mostra l'icona di circuito corretta e chiede tre cifre invece di quattro. Per tutto ciò che viene dopo, no. L'ambiente di test di un fornitore riconosce i numeri precisi che pubblica, e un numero casuale che condivida le prime quattro cifre con uno di essi non è uno di essi. Stripe, Adyen e PayPal documentano ciascuno un elenco, e la parte utile di quegli elenchi sono i numeri che falliscono di proposito — uno per fondi insufficienti, uno per carta smarrita, uno per codice di sicurezza non corrispondente — perché gestire bene un rifiuto è la parte di una cassa che si rompe davvero.
- Quali trasposizioni sfuggono a Luhn?
- Esattamente una coppia adiacente: 09 digitato 90, e 90 digitato 09. Prova tutte le novanta coppie ordinate di cifre diverse e ottantotto degli scambi vengono intercettati. L'eccezione discende dall'aritmetica: raddoppiare 0 dà 0 e raddoppiare 9 dà 18, che si riduce a 9, quindi la coppia contribuisce con 9 in entrambi i versi. C'è un secondo punto cieco, meno citato, di un'altra famiglia: gli errori gemelli, quando una coppia raddoppiata viene digitata al posto di un'altra coppia raddoppiata. Inserire 55 al posto di 22, 66 al posto di 33 o 77 al posto di 44 lascia la somma invariata e passa. Sono due limiti noti di un metodo progettato negli anni Cinquanta per intercettare una cifra ricopiata a mano, ed entrambi sono estranei alla sicurezza, perché Luhn non è mai stato un controllo di sicurezza.
- Perché la mia validazione rifiuta una Mastercard vera che comincia con 2?
- Perché la regola è stata scritta contro la vecchia fascia. Mastercard è stata 51-55 per decenni, e moltissimi schemi di validazione lo dicono ancora. Il circuito ha aggiunto la serie 2 nel 2017, una fascia che va da 222100 a 272099, e gli esercenti hanno dovuto accettarla. Uno schema precedente eredita il buco, e lo eredita anche uno ricavato da un generatore che emetteva solo 51-55: è quello che faceva questo. Ora estrae le due fasce in misura uguale, quindi il suo output le copre entrambe; ma scrivi lo schema sugli intervalli pubblicati dal circuito e non su un generatore qualsiasi, e tratta il riconoscimento del circuito dal prefisso come manutenzione e non come un lavoro una tantum, perché gli intervalli cambiano.
- È lecito generare numeri di carta?
- Calcolare una cifra di controllo è aritmetica, e l'aritmetica da sola non è la questione. Conta l'uso che si fa del numero. Costruire un set di prova per esercitare un modulo è normale lavoro software; tentare di ottenere beni o servizi con un numero che nessuno ti ha emesso è frode, ovunque, indipendentemente dal fatto che soddisfi una somma di controllo. Qui non esiste una via di mezzo utile, perché un numero generato non può comprare nulla comunque: dietro non c'è alcun conto e nessun emittente lo autorizzerà. Il consiglio pratico coincide con quello tecnico: usa i numeri di test pubblicati dal tuo fornitore, tienili nella tua suite di test, e non mettere mai un numero di carta vero in un ambiente di sviluppo, argomento su cui il tuo contratto con quel fornitore e lo standard di sicurezza dei dati del settore hanno entrambi molto da dire.
Articoli che potrebbero interessarti
Tutte le guide →Strumenti correlati
Questo articolo parla di come si prova un modulo di pagamento, e di nient'altro. Un numero generato non è un mezzo di pagamento: dietro non c'è alcun conto, nessun emittente lo autorizzerà, e provare a usarlo per ottenere beni o servizi è frode in ogni giurisdizione in cui questo sito è pubblicato. I numeri di carta reali sono dati regolamentati: lo standard PCI DSS disciplina come vengono conservati e trattati, e il tuo contratto con il fornitore dirà di più. Niente qui è consulenza legale, di sicurezza o di conformità: usa i numeri di test pubblicati dal tuo fornitore e chiedi a lui in caso di dubbio.
Fonti
- United States Patent and Trademark Office — US Patent 2,950,048, Computer for Verifying Numbers, Hans P. Luhn, filed 6 January 1954 and granted 23 August 1960 — describes the alternating substitution of doubled digits with an end-around carry and the appended check digit that makes the cross-addition come out to zero
- Stripe — Testing — Stripe's published test card numbers by brand (4242424242424242 for Visa, 5555555555554444 for Mastercard, 378282246310005 for American Express, 6011111111111117 for Discover, 3566002020360505 for JCB, 36227206271667 for a 14-digit Diners Club), plus the numbers that trigger specific declines such as insufficient funds, a lost card and an incorrect security code; Stripe's terms prohibit testing in live mode with real payment details
- Adyen — Test card numbers — Adyen's own list, including 4111 1111 1111 1111 and 4111 1111 4555 1142 for Visa and 5100 0600 0000 0002 for Mastercard, with the explicit statement that these test card numbers only work with Adyen's test platform and do not work on other platforms
- PayPal Developer — Card testing in the sandbox — the card details PayPal publishes for use against its sandbox environment, and the scenarios they are designed to reproduce
Hai notato un errore in questo articolo?