io costruisco Toolz.dev, e prima di ciò ho passato anni a spedire plugin WordPress e API Laravel, molti dei quali dovevano prendere pagamenti Il primo modulo di checkout che abbia mai scritto ha inviato ogni numero di carta digitato male direttamente al gateway di pagamento e ha aspettato che rimbalzasse Ha funzionato, tecnicamente, ma è stato lento e ha bruciato le richieste del gateway su numeri che non avrebbero mai potuto essere validi in primo luogo La correzione era imbarazzantemente piccola: esegui il checksum Luhn nel browser prima di inviare Che una modifica ha catturato la maggior parte degli errori di battitura istantaneamente e ha fermato un flusso di chiamate API inutili Questa guida riguarda quel controllo, le regole del prefisso che si trovano accanto ad esso e il Convalidatore di carte di credito Ho costruito in modo che non si debba mai reimplementare nemmeno a memoria.
tl; dr: Un validatore di carte di credito conferma che un numero è strutturalmente corretto, non che appartenga a un conto reale Esegue due test indipendenti: il checksum Luhn da ISO/IEC 7812-1, che cattura quasi ogni tipo a singola cifra e trasposizione adiacente, e un controllo di lunghezza e prefisso contro ogni rete's intervalli di emittente pubblicati Un numero può passare uno e fallire l'altro, quindi i due risultati sono riportati separatamente Funziona interamente nel tuo browser, quindi nessun numero di carta viene mai caricato, e non può mai dirti se una carta ha soldi su di esso Solo l'emittente lo sa.
Cosa significa che un numero di carta sia valido?
Un numero di carta di pagamento, formalmente un Primary Account Number o PAN, non è una stringa casuale di cifre La sua struttura è definita da ISO/IEC 7812. Le prime sei-otto cifre sono il Numero di Identificazione dell'Emittente, o IIN, che un tempo si chiamava Numero di Identificazione Bancaria (BIN) Quelle cifre identificano la rete e la banca emittente Le cifre successive fino alla penultima sono l'identificatore del conto individuale, e l'ultima cifra è una cifra di controllo calcolata con l'algoritmo di Luhn.
Quindi & quot; valid" ha due significati separati, e aiuta a tenerli separati Il primo è che il numero obbedisce al checksum di Luhn, il che significa che la cifra di controllo è coerente con il resto del numero Il secondo è che il numero ha la lunghezza e il prefisso giusti per una rete di carte reali Un numero può soddisfare una condizione e non l'altra. 4111 1111 1111 1112 ha un prefisso Visa e una lunghezza Visa ma non riesce Luhn Una stringa casuale di sedici cifre che finisce nella cifra di controllo giusta passa Luhn ma potrebbe iniziare con un prefisso che nessuna rete possiede Un buon validatore ti dice quale dei due non è riuscito, perché la correzione è diversa in ogni caso.
Ciò che nessuno dei due assegni può fare è dirti che la carta è reale La validità strutturale riguarda la forma del numero, non lo stato del conto dietro di esso Il conto potrebbe non esistere, potrebbe essere congelato, potrebbe essere oltre il suo limite o potrebbe essere stato chiuso anni fa L'unico sistema che lo sa è la banca emittente, e risponde esattamente una volta, durante una richiesta di autorizzazione in una transazione live Tutto ciò che fa un validatore lato browser è un pre-filtro economico che viene eseguito prima di arrivare a quel punto.
Come funziona l'algoritmo di Luhn?
L'algoritmo di Luhn, chiamato anche algoritmo mod-10, è stato brevettato da Hans Peter Luhn alla IBM nel 1960 ed è ora di pubblico dominio, si tratta di un checksum, il che significa che il suo intero scopo è quello di rilevare errori accidentali, non di fornire alcuna sicurezza Funziona così Partendo dalla cifra più a destra e spostandosi a sinistra, si raddoppia ogni seconda cifra Se il raddoppio produce un numero maggiore di nove, si sottrae nove da esso (che è lo stesso che sommare le sue due cifre insieme) Poi si sommano tutte le cifre, quelle raddoppiate e quelle intatte Se il totale è divisibile per dieci, il numero passa.
Ecco il check on 4111 1111 1111 1111, lavorando da destra a sinistra La cifra più a destra è la posizione uno e non è raddoppiata Raddoppiando ogni seconda cifra si ottiene un insieme di uno e due, i due provenienti dalle posizioni raddoppiate Sommarli tutti e il totale atterra su un multiplo di dieci, quindi il numero passa Cambia ogni singola cifra e la somma smette quasi sempre di essere un multiplo di dieci, che è esattamente ciò che rende utile l'assegno.
Il valore di Luhn è in quello che cattura Rileva ogni errore a singola cifra, ovvero qualsiasi cifra digitata in modo errato Cattura anche quasi ogni trasposizione di due cifre adiacenti, il classico & quot; Ho digitato 21 invece di 12" errore, con un'eccezione nota: non cattura uno scambio di 09 e 90, perché entrambi mappano alla stessa somma ponderata Quello è un vero punto cieco, ma è raro, ed è il motivo per cui Luhn è un checksum piuttosto che una garanzia crittografica Per la convalida del modulo è più che abbastanza buono, ed è il motivo per cui si trova dietro i campi delle carte essenzialmente di ogni checkout su internet.
Come viene rilevata la rete di carte?
La rete viene letta dalle cifre iniziali, l'IIN. Ogni rete possiede intervalli di prefisso specifici e la maggior parte limita anche la lunghezza totale. Il validatore corrisponde prima al prefisso più lungo e specifico, perché alcuni intervalli si sovrappongono. Ecco gli intervalli che controlla:
| network | Inizia con | Lunghezze valide | Codice sicurezza |
|---|---|---|---|
| Visa | 4 | 13, 16, 19 | 3 |
| Mastercard | 51-55, 2221-2720 | 16 | 3 |
| Espresso americano | 34, 37 | 15 | 4 |
| Scopri | 6011, 65, 644-649, 622126-622925 | 16, 19 | 3 |
| Club Diners | 300-305, 309, 36, 38-39 | 14, 16, 19 | 3 |
| JCB | 3528-3589 | 16-19 | 3 |
| UnionPay | 62 | 16-19 | 3 |
| Maestro | 50, 56-69 (selezionato) | 12-19 | 3 |
Le sovrapposizioni sono la parte interessante, e sbagliarle è quanto ingenui rivelatori sbagliano Mastercard ha aggiunto il 2221-2720 range nel 2017, quindi un rilevatore scritto prima di allora segnala quelle carte come sconosciute Discover possiede una fetta stretta del 62 spazio, 622126 da parte a parte 622925, mentre UnionPay possiede il resto di 62, quindi l'ordine in cui li testi decide se a 6221 la carta si legge come Discover o UnionPay Il validatore testa la finestra Discover specifica prima dell'ampio prefisso UnionPay in modo che entrambi atterrino correttamente American Express è quella che fa scattare il codice di formattazione, perché utilizza quindici cifre raggruppate 4-6-5 anziché i soliti quattro gruppi di quattro, e utilizza un codice di sicurezza a quattro cifre (il CID stampato sul davanti) anziché il CVV a tre cifre sul retro.
Come utilizzare il validatore della carta di credito
Lo strumento è volutamente semplice Si incolla un numero e si legge il risultato Non c'è un pulsante di invio e niente da configurare.
Passo 1: Inserisci il numero
Digitare o incollare il numero della carta nel campo Spazi e trattini vengono ignorati, quindi 4111-1111-1111-1111, 4111 1111 1111 1111, e 4111111111111111 tutti convalidano in modo identico Questo è importante perché l'input reale arriva in ogni formato: copiato da un foglio di calcolo, letto da una scheda o estratto da un dispositivo di prova.
Passo 2: Leggi il verdetto
La parte superiore del risultato ti dice chiaramente se il numero è valido e, in caso contrario, ne indica il motivo. Sotto, i due controlli sono mostrati separatamente: se il checksum Luhn è passato e se la lunghezza corrisponde alla rete rilevata. Vederli separati è il punto. Un numero che passa Luhn ma non supera la lunghezza significa quasi sempre che una cifra è stata eliminata o aggiunta, mentre un numero che non supera Luhn ma ha la lunghezza giusta di solito significa che una cifra è semplicemente sbagliata.
Passaggio 3: controllare la rete rilevata
Lo strumento mostra la rete che ha identificato dal prefisso, le lunghezze che la rete consente e quanto dovrebbe essere lungo il suo codice di sicurezza Questo è utile da solo quando si sta costruendo un modulo e si desidera mostrare il logo della carta giusta, o quando è necessario sapere se aspettarsi un CVV a tre o quattro cifre.
Passo 4: Copia il numero formattato o mascherato
Puoi copiare il numero raggruppato nel modo in cui la sua rete lo stampa, o copiare una versione mascherata che nasconde ogni cifra tranne le ultime quattro Il modulo mascherato è quello che desideri nei registri, negli screenshot e nei ticket di supporto, perché memorizzare o visualizzare un PAN completo è esattamente il tipo di cosa che mette le persone nei guai con la conformità.
Dove si adatta la convalida e dove si ferma?
L'inquadratura onesta è che un validatore è un filtro, non un cancello Appartiene alla parte anteriore di un processo per rifiutare l'ovvia spazzatura a buon mercato, e non deve mai essere considerato la prova di nulla a valle In un modulo di pagamento, l'esecuzione del lato client Luhn ti consente di contrassegnare un errore di battitura nel momento in cui l'utente termina di digitare, prima che raggiunga la retribuzione, che è un'esperienza migliore e salva un viaggio di andata e ritorno condannato al gateway In una pipeline di dati, la convalida dei campi a forma di carta cattura le righe danneggiate prima che raggiungano un sistema che si soffocherà su di loro Nelle suite di test, sono necessari numeri che superano la convalida in modo che il modulo si comporti come farà in produzione, che è ciò a cui servono i numeri di test pubblicati.
Quello che non fa è autorizzare, e questo vale la pena di essere schietto su Un numero valido non è una carta di lavoro Lo strumento non può controllare un saldo, non può confermare l'esistenza del conto, e non ha alcun collegamento con qualsiasi banca Inoltre non può, e non dovrebbe, generare numeri legati a conti reali I numeri di esempio che offre sono i valori di prova standard pubblicati dai fornitori di pagamento, che sono Luhn-valid e superano i controlli di rete proprio in modo che gli sviluppatori possono esercitare i loro moduli, ma che mappa a nulla addebitabile Se si sta costruendo qualcosa che tocca pagamenti reali, la convalida effettiva di se una carta può essere addebitata avviene lato server attraverso il vostro processore di pagamento, e i dati della carta stessa dovrebbero essere tokenizzati in modo che i vostri sistemi non memorizzano mai un PAN grezzo La convalida lato cliente è la porta d'ingresso educata, non il caveau.
Come si confronta questo con la convalida sul server?
Entrambi hanno un posto, e rispondono a domande diverse La convalida lato client con Luhn e i controlli dei prefissi è istantanea e privata, dà all'utente un feedback prima che si invii, e non ti costa nulla Il suo limite è che conosce solo la struttura La convalida lato server attraverso un processore di pagamento è l'unica cosa che può confermare che una carta è reale e addebitabile, ma costa una richiesta di rete, può costare denaro per tentativo di autorizzazione, e succede dopo che l'utente si è impegnato a inviare Il design sensato utilizza entrambi: il browser cattura i refusi e gli errori di forma gratuitamente, e il server fa l'unico controllo che conta quando l'utente paga Saltare il controllo client fa sentire lento il modulo; saltare il controllo del server significa che non si sta mai veramente convalidato nulla Se si sta assemblando un kit più ampio per questo tipo di lavoro, il Strumenti di produttività per sviluppatori roundup copre le altre utilità che tendono a vivere accanto ad esso.
Strumenti correlati e ulteriori letture
Un validatore di carte viaggia raramente da solo Quando si sta indurendo un modulo o una pipeline di dati, di solito si stanno anche generando identificatori, valori di hashing e controllando altri tipi di input Il generatore hash è ciò che raggiungi quando devi rilevare un valore piuttosto che convalidarne la forma, e il verificatore della forza della password applica lo stesso & quot; misuralo nel browser, non inviarlo mai da nessuna parte& quot; principio alle credenziali Dal lato della rete, il Calcolatore di sottorete IP è lo strumento complementare per chiunque costruisca l'infrastruttura su cui viene eseguito un checkout.
Per il contesto più ampio, il Privacy e strumenti online la guida spiega perché l'esecuzione di controlli sensibili è importante dal lato client e il Guida agli strumenti di codifica mette il validatore nel contesto del resto di un kit giornaliero developer's Tutto su Toolz.dev viene eseguito nel browser, che è l'intera ragione per cui un numero di carta è sicuro da incollare in esso: non lascia mai il dispositivo.
Domande frequenti
Cosa controlla l'algoritmo di Luhn?
L'algoritmo di Luhn è un checksum mod-10 che verifica che un numero non sia stato digitato erroneamente Raddoppia ogni seconda cifra da destra, sottrae nove da qualsiasi risultato superiore a nove, somma tutte le cifre e conferma che il totale è divisibile per dieci. Cattura ogni errore a una cifra e quasi ogni scambio di due cifre adiacenti, ma è un checksum, non una funzionalità di sicurezza e non può dimostrare che una carta sia reale.
Un numero valido significa che la carta funziona?
No. Un numero valido significa solo che le cifre sono strutturalmente corrette, quindi il checksum passa e la lunghezza corrisponde alla rete, se il conto esiste, ha un saldo o è ancora attivo può essere confermato dall'emittente della carta solo durante un'autorizzazione reale La validità strutturale è un pre-filtro, non la prova di una carta utilizzabile.
Come viene rilevato il marchio della carta dal numero?
Il marchio viene letto dalle prime cifre, il Numero di Identificazione dell'Emittente Visa inizia con 4, Mastercard con 51-55 o 2221-2720, American Express con 34 o 37, e così via Ogni rete permette anche solo determinate lunghezze totali, quindi il validatore controlla insieme il prefisso e la lunghezza e segnala la rete che ha abbinato.
È sicuro inserire un numero di carta in questo strumento?
Sì. Il numero viene elaborato interamente nel browser e non viene mai caricato, registrato o trasmesso Puoi confermarlo disconnettendoti da internet, perché il validatore continua a lavorare senza connessione Detto questo, dovresti comunque evitare di incollare un numero di carta reale ovunque non sia necessario, e preferire i numeri di test pubblicati per lo sviluppo.
Perché la mia vera carta passa Luhn ma non supera il controllo della lunghezza?
Ciò di solito significa che una cifra è stata eliminata o aggiunta durante la digitazione. Il checksum Luhn può passare per coincidenza su un numero della lunghezza sbagliata, quindi lo strumento controlla la lunghezza in modo indipendente rispetto alla rete rilevata. Inserisci nuovamente il numero completo ed entrambi i controlli dovrebbero passare insieme.
Cosa sono i numeri delle carte di prova e perché esistono?
Numeri di carte di prova come 4111 1111 1111 1111 sono pubblicati dai fornitori di servizi di pagamento in modo che gli sviluppatori possano esercitare i moduli di pagamento Sono Luhn-validi e superano i controlli di rete in modo che il modulo si comporti esattamente come sarà in produzione, ma mappano su nessun conto reale e non possono mai essere addebitati Sono la cosa corretta da usare ovunque si sarebbe altrimenti tentati di digitare una carta reale.
Qual è la differenza tra il CVV e il numero della carta?
Il numero della carta è il numero di conto primario lungo che identifica il conto Il CVV, CVC o CID è il codice di sicurezza breve, tre cifre per la maggior parte delle reti e quattro per American Express, stampato separatamente dal numero Questo strumento convalida solo il numero della carta; non controlla il codice di sicurezza, che viene verificato dall'emittente durante una transazione.
Questo validatore può generare carte di credito funzionanti?
No. Controlla solo i numeri che inserisci e non ha modo di produrre un numero legato a un conto live I numeri di esempio che offre sono i valori di test standard pubblicati che non raggiungono un conto reale Generare numeri per una carta reale non è qualcosa che un validatore strutturale può fare, e non è qualcosa che questo strumento tenta.



