Domanda:
Come fa un sito web a sapere se un certo numero di carta di credito è sbagliato all'istante
tony9099
2015-02-16 21:35:27 UTC
view on stackexchange narkive permalink

Stavo rinnovando il mio abbonamento Internet tramite il portale online del mio ISP. Quello che mi ha colpito è stato quando ho inserito 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 inserito sbagliato. Quando ho premuto il pulsante di invio, il sito web mi ha dato automaticamente un errore che il numero di carta che ho inserito non era valido. Sento che questo è stato fatto localmente nel browser e nessun dato è stato inviato e controllato su un server e restituito una risposta.

La mia domanda è: esiste una sequenza di numeri che ogni fornitore ha? Altrimenti, come farebbe il sito web (a livello locale) a sapere del numero sbagliato?

Poiché un numero CC non è in realtà un numero singolo, ha una struttura interna. Ad esempio, la prima cifra indica il tipo di società dell'emittente, ad es. Amex è 3 perché è davvero un'agenzia di viaggi, non una banca, che sarebbe 4 o 5. Le cifre successive per Amex devono essere un 4 o un 7. E così via e così via.
La mia comprensione con Visa / MC era che i primi 2 gruppi denotavano quale carta fosse, il secondo gruppo denotava banca e l'ultimo gruppo denotava conto.
Cordiali saluti, sono disponibili diversi numeri di carte di credito di prova. Ad esempio qui: https://www.merchantplus.com/help/logos-test-numbers/
Cinque risposte:
Peteris
2015-02-16 23:11:50 UTC
view on stackexchange narkive permalink

Checksum

I numeri CC, così come praticamente qualsiasi altro numero importante ben progettato (ad esempio i numeri di conto nelle banche) tendono a includere un checksum per verificare l'integrità del numero. Sebbene non sia una funzionalità di sicurezza (poiché è 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 si esegue manualmente inserendo numeri lunghi.

http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers è un esempio di tale test.

Emittente

Se un numero CC è tecnicamente corretto, potrebbe comunque non essere un numero CC reale. Il metodo per verificarlo è semplice e complicato allo stesso tempo: in genere, se si dispone di un accesso appropriato, è possibile cercare l'istituto emittente per ciascun intervallo di numeri di carta, quindi chiedere all'emittente [i sistemi di carte] se pensano che questa sia una carta valida. Ebbene, la seconda parte generalmente avviene come parte dell'esecuzione di un pagamento CC, ma la verifica dell'emittente a volte viene eseguita prima come test esteso; ma non sul browser del client.

Come esempio di "tecnicamente corretto", la carta Visa-ish numero 4111-1111-1111-1111 supera il test Luhn, ma chiaramente non è reale.
@Bobson Sono abbastanza sicuro che sia un numero di prova.
@MiniRagnarok: Sì. È il test standard per Visa in particolare perché * supera * Luhn.
In genere, se l'ISP intende addebitare effettivamente la carta di credito, autorizzerà un piccolo importo su di essa (ad esempio 1 USD). Ciò non ridurrà il saldo ma funge da indicatore rapido, impiegando circa il tempo di una richiesta web, se la carta è effettivamente valida, dato che la banca della carta deve confermare l'importo autorizzato. Questo viene spesso fatto dopo aver verificato la validità sintattica della carta per ridurre significativamente le possibilità di rimbalzo delle carte di credito.
EarlCrapstone
2015-02-16 21:40:00 UTC
view on stackexchange narkive permalink

Negli Stati Uniti, usano l'algoritmo di Luhn:

http://en.wikipedia.org/wiki/Luhn_algorithm

Come il 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 raddoppio è maggiore di 9 (es. 8 × 2 = 16), somma le cifre dei prodotti (es. 16: 1 + 6 = 7, 18: 1 + 8 = 9).
  2. Prendi la somma di tutte le cifre.
  3. Se il totale modulo 10 è uguale a 0 (se il totale finisce con zero) allora 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 delle cifre quindi calcolando 9 volte quel valore modulo 10 . In forma di algoritmo:

  1. Calcola la somma delle cifre (dopo aver raddoppiato 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. Numero: 4 3 2 1 5 6 7 8 7 5 3 1 4 5 6 X2. Raddoppia ogni secondo: 8 4 10 14 14 6 8 123. Somma cifre >9: 8 3 4 1 1 6 5 8 5 5 6 1 8 5 34. Somma tutte le cifre: 8 + 3 + 4 + 1 + 1 + 6 + 5 + 8 + 5 + 5 + 6 + 1 + 8 + 5 + 3 = 695. Moltiplica la somma per 9: 69 x 9 = 6216. Prendi il valore mod 10: 621 mod 10 = 1 = > x = 1  

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

Se lo dovessi eseguire nuovamente l'algoritmo per verificare il numero, quindi la somma di tutte le cifre nel passaggio 4 sarà 69 + 1 = 70 . Quindi, 70 mod 10 = 0 , quindi il numero è valido secondo l'algoritmo.

L'ho provato sul mio numero e apparentemente utilizza un algoritmo diverso.
@tony9099 In realtà, usando MOD 10, stavano finendo i numeri validi, quindi (le banche) sono passate a un algoritmo modificato che utilizza invece MOD 5, ma il principio è lo stesso. La cifra di controllo deve forzare l'intero valore sommato (come descritto) a terminare con 5 o 0. Tutte le carte negli Stati Uniti utilizzano questo algoritmo, ma spetta al fornitore della carta decidere se utilizzeranno MOD 10 o MOD 5. Ad esempio, sono abbastanza sicuro che Diners utilizzi MOD 10, mentre Visa e Mastercard utilizzano MOD 5.
Come possono cambiare algoritmi di verifica con milioni di terminali di carte di credito e applicazioni software sul campo che dovrebbero essere riscritte con il nuovo algoritmo?
I terminali e le applicazioni software di @Johnny possono utilizzare la versione mod 5. Qualsiasi numero che supera il test mod 10 supererà per definizione anche il test mod 5.
@Johnny Questo passaggio è avvenuto molti decenni fa, quando i terminali erano più stupidi e trasmettevano ciecamente tutto ciò che superava la somma di controllo magnetica facendo scorrere la carta. Era possibile anche l'inserimento manuale, ma quei sistemi non convalidavano, ma invece sprecavano larghezza di banda mentre telefonava a casa (a una banca, ecc.) Con il numero non valido. In effetti, sono abbastanza sicuro che la maggior parte dei terminali oggi non presume che un numero valido sia quello che possono controllare offline. Alcuni siti Web utilizzano la convalida di base (ad esempio, un 4 iniziale è Visa e 16 numeri), ma pochi implementano il controllo Luhn.
Luhn è ampiamente utilizzato, non solo negli Stati Uniti. Tuttavia, non è l'unico controllo immediato che può essere effettuato senza connettersi all'host di autorizzazione dell'Emittente della Carta.
baordog
2015-02-16 21:39:03 UTC
view on stackexchange narkive permalink
  1. Molti siti hanno controlli lato client su CC #. Tutti i numeri di carta di credito hanno all'incirca la stessa lunghezza. (Come sottolineano i commentatori, ci sono diverse lunghezze. In generale, le lunghezze sono conosciute dall'implementatore e c'è un piccolo insieme.) Ci sono stringhe di numeri che si riferiscono a ciascun fornitore.
  2. Dal punto di vista della sicurezza è meglio che ci siano anche alcuni controlli lato server. Se sei un tester della penna, sarebbe qualcosa da controllare. Se non lo sei, rimani fuori perché potresti finire in grossi guai.

https://www.mint.com/blog/trends/credit-card-code-01202011/

Lo scambio di stack riguarda il rimanere in tema. Questo paragrafo non riguarda tutti gli argomenti sulla terra. Va bene far sapere alle persone che è stato vero in ogni scambio di stack.
Il fatto è che questo non è Stack Exchange, questo è https://security.stackexchange.com/ quindi la mia domanda era relativa alla sicurezza. Quindi penso che sia valido. Non ho bisogno che tu mi dica che non lo è.
Questa è una domanda di sicurezza molto valida. Molto tempo fa, non era necessario un computer per formulare numeri CC validi. Ecco perché CCV è ora implementato.
"Tutti i numeri di carta di credito hanno la stessa lunghezza." - Sei sicuro?
*> [Un numero di carta ISO / IEC 7812 è generalmente di 16 cifre e può contenere fino a 19 cifre.] (Http://en.wikipedia.org/wiki/Bank_card_number) *; AmEx è di 15 cifre.
@Virusboy Il tuo commento "Ecco perché CCV è ora implementato" - c'è un modo per pre-verificare un CCV? È in qualche modo correlato al CC #?
@tcrosley è qualcosa che non sono stato in grado di determinare. I fattori coinvolti sono l'emissione del numero di banca o dell'RNG dall'emittente della carta di credito.
MikeRoger
2015-02-17 18:51:45 UTC
view on stackexchange narkive permalink

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

La maggior parte (ma non tutti) gli schemi di carte utilizza il test di Checksum (Luhn) descritto in altre risposte. Tuttavia, in aggiunta, alcuni algoritmi utilizzano anche (abbastanza semplice) il riconoscimento dell'intervallo di carte (CRR) basato sull'inizio del numero di carta (noto anche come intervallo). Alcuni controllano anche la lunghezza della carta.

Vedi ad esempio le somiglianze in molti dei vari algoritmi descritti su: - https://stackoverflow.com/questions/72768/how-do-you- rileva il tipo di carta di credito in base al numero

Alcuni colleghi mi hanno recentemente messo su http://www.exactbins.com/bin-lookup. Lo trovano più affidabile rispetto ai siti concorrenti. Tuttavia, ho un avvertimento: per me identifica erroneamente le gamme che abbiamo da UPI, come Maestro piuttosto che UnionPay.
user68527
2015-02-22 18:46:07 UTC
view on stackexchange narkive permalink

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

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

Se d1 e d2 sono cifre adiacenti nel numero della carta di credito (d1! = d2), quindi il loro contributo al checksum è f (d1) + d2 o f (d2) + d1 e, se trasposte, sono f (d2) + d1 o f (d1) + d2. Se queste due somme sono uguali o la loro differenza è un multiplo di 10, il checksum non fa distinzione tra la loro trasposizione.

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

La funzione f (d) è la raddoppio e somma di cifre che potrebbero essere definite come segue in python per 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 precedente. La prova è noiosa, ma può essere trovata per intero nella seguente risorsa da cui ho preso la citazione di blocco sopra.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...