Come fa un sito Web a sapere se un certo numero di carta di credito è sbagliato all'istante

42

Stavo rinnovando il mio abbonamento Internet tramite il portale online del mio ISP. Quello che mi ha colpito è stato quando stavo inserendo i dati della mia carta di credito, ho inserito il tipo di carta di credito (MasterCard, Visa, AA, ecc.) E quando ho inserito i numeri, c'era un numero che ho sbagliato. Quando ho premuto il pulsante di invio, il sito Web mi ha segnalato automaticamente che il numero di carta inserito non era valido. Sento che questo è stato fatto localmente nel browser e nessun dato è stato spinto e controllato su un server e inviato una risposta.

La mia domanda è, c'è qualche sequenza di numeri che ogni venditore ha? Altrimenti, in che modo il sito web (localmente) è a conoscenza del numero sbagliato?

    
posta tony9099 16.02.2015 - 16:35
fonte

5 risposte

67

Checksum

I numeri CC, così come praticamente tutti i numeri importanti ben progettati (ad esempio numeri di conto nelle banche) tendono a includere un checksum per verificare l'integrità del numero. Anche se non è una funzionalità di sicurezza (dato che è banale da calcolare), un algoritmo di checksum decente può garantire di fallire sempre se (a) è stato fatto un singolo errore di battitura o (b) vengono scambiate due cifre vicine, che sono i due errori più comuni quando manualmente inserendo numeri lunghi.

Il link è un esempio di tale test.

Emittente

Se un numero CC è tecnicamente corretto, potrebbe non essere ancora un vero numero CC. Il metodo per verificare che sia semplice e complicato allo stesso tempo - in genere, se si dispone dell'accesso appropriato, è possibile consultare l'istituto emittente per ciascun intervallo di numeri di tessera e quindi chiedere ai sistemi di carte dell'emittente se pensano che questa sia una carta valida. Bene, la seconda parte generalmente avviene come parte del pagamento di un CC, ma la verifica dell'emittente viene a volte eseguita prima come prova estesa; ma non sul browser client.

    
risposta data 16.02.2015 - 18:11
fonte
36

Negli Stati Uniti, usano l'algoritmo Luhn:

link

In che modo l'algoritmo verifica un numero:

  1. Dalla cifra più a destra, che è la cifra di controllo, spostandosi a sinistra, raddoppia il valore di ogni seconda cifra; se il prodotto di questa operazione di raddoppiamento è maggiore di 9 (ad es. 8 × 2 = 16), somma le cifre dei prodotti (ad es. 16: 1 + 6 = 7, 18: 1 + 8 = 9).
  2. Prendi la somma di tutte le cifre.
  3. Se il totale del modulo 10 è uguale a 0 (se il totale termina con zero), il numero è valido secondo la formula di Luhn; altrimenti non è valido.

Come calcolare la cifra di controllo:

La cifra di controllo si ottiene calcolando la somma di cifre, quindi calcolando 9 volte il valore di modulo 10. In forma algoritmica:

  1. Calcola la somma delle cifre (dopo il raddoppio di ogni seconda cifra).
  2. Moltiplica per 9.
  3. L'ultima cifra è la cifra di controllo.

Esempio:

Numero: 4321-5678-7531-456x (dove x è la cifra di controllo).

1. Number:              4   3   2   1   5   6   7   8   7   5   3   1   4   5   6   X
2. Double every second: 8       4      10      14      14       6       8      12
3. Sum digits >9:       8   3   4   1   1   6   5   8   5   5   6   1   8   5   3
4. Sum all digits:      8 + 3 + 4 + 1 + 1 + 6 + 5 + 8 + 5 + 5 + 6 + 1 + 8 + 5 + 3 = 69

5. Multiply sum by 9:   69 x 9 = 621
6. Take value mod 10:   621 mod 10 = 1  =>  x = 1

La cifra di controllo è 1 e il numero valido completo è 4321-5678-7531-4561 .

Se dovessi eseguire di nuovo l'algoritmo per verificare il numero, la somma di tutte le cifre nel passaggio 4 sarebbe 69 + 1 = 70 . Quindi, 70 mod 10 = 0 , quindi il numero è valido in base all'algoritmo.

    
risposta data 16.02.2015 - 16:39
fonte
7
  1. Molti siti hanno controlli lato client su CC #. Tutti i numeri di carta di credito sono circa della stessa lunghezza. (Come osservano i commentatori, ci sono diverse lunghezze: in generale, le lunghezze sono note all'implementatore e c'è un piccolo insieme.) Ci sono stringhe di numeri che si riferiscono a ciascun fornitore.
  2. Da un punto di vista della sicurezza è meglio che ci siano anche alcuni controlli sul lato server. Se sei un tester di penna, sarebbe qualcosa da controllare. Se non lo sei, allora rimani fuori perché potresti avere qualche grosso problema.

link

    
risposta data 16.02.2015 - 16:39
fonte
4

Checksum, riconoscimento dell'intervallo di carte e controlli di lunghezza

La maggior parte (ma non tutti) gli schemi di carte usano il test di Checksum (Luhn) descritto in altre risposte. Tuttavia, in aggiunta, alcuni algoritmi usano anche (abbastanza basico) Card Range Recognition (CRR) basato sull'inizio del numero della carta (AKA l'intervallo). Alcuni controllano anche la lunghezza della carta.

Vedi ad esempio le somiglianze in molti dei vari algoritmi descritti in: - link

    
risposta data 17.02.2015 - 13:51
fonte
3

Solo per completezza: l'algoritmo di Luhn ha un difetto secondario.

TL; DR: "l'algoritmo Luhn rileva la trasposizione di cifre adiacenti se non sono 09 o 90"

If d1 and d2 are adjacent digits in the credit card number (d1 != d2), then their contribution to the checksum is either f(d1) + d2 or f(d2) + d1, and if transposed they are either f(d2) + d1 or f(d1) + d2. If these two sums are the same or their difference is a multiple of 10, then the checksum does not distinguish between their transposition.

"Credit Cards" 2007, in An Introduction to the Mathematics of Money, Springer New York, NY, pp. 101-112.

La funzione f(d) è il raddoppio e la somma di cifre che potrebbero essere definite come segue in python per gli interi d : def f(d): return sum([int(x) for x in str(2 * d)])

Non ci sono due cifre che saranno zero mod 10 nello scenario sopra. La dimostrazione è noiosa, ma può essere trovata per intero nella seguente risorsa da cui ho preso la citazione precedente.

    
risposta data 22.02.2015 - 13:46
fonte

Leggi altre domande sui tag