Luhn

Luhn

Medio

Introduzione

Alla Global Verification Authority ti è appena stato affidato un incarico fondamentale. In tutta la città, dagli acquisti online agli accessi sicuri, innumerevoli operazioni si affidano all'accuratezza di identificatori numerici come i numeri di carta di credito, i numeri di conto bancario, i codici di transazione e gli ID di tracciamento. L'algoritmo di Luhn è una semplice formula di checksum che serve a garantire che questi numeri siano validi e privi di errori.

Un lotto di identificatori è appena arrivato sulla tua scrivania. Tutti devono superare il test di Luhn per garantire che siano legittimi. Se qualcuno non lo supera, verrà segnalato come non valido, evitando così errori o frodi, come transazioni errate o accessi non autorizzati.

Riesci a fare in modo che tutto sia fatto per bene? L'integrità di molti servizi dipende da te.

Istruzioni

Stabilisci se un numero di carta di credito è valido secondo la formula di Luhn.

Il numero verrà fornito come stringa.

Validare un numero

Le stringhe di lunghezza pari o inferiore a 1 non sono valide. Nell'input sono ammessi gli spazi, ma vanno rimossi prima del controllo. Tutti gli altri caratteri non numerici non sono ammessi.

Esempio 1: numero di carta di credito valido

4539 3195 0343 6467

Il primo passo dell'algoritmo di Luhn consiste nel raddoppiare ogni seconda cifra, partendo da destra. Raddoppieremo

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

Se raddoppiando la cifra si ottiene un numero maggiore di 9, sottrai 9 dal prodotto. Ecco i risultati del nostro raddoppio:

8569 6195 0383 3437

Poi somma tutte le cifre:

8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80

Se la somma è esattamente divisibile per 10, il numero è valido. Questo numero è valido!

Esempio 2: numero di carta di credito non valido

8273 1232 7352 0569

Raddoppia le seconde cifre, partendo da destra

7253 2262 5312 0539

Somma le cifre

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57 non è esattamente divisibile per 10, quindi questo numero non è valido.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Scala Exercism

Vuoi iniziare Luhn?

Iscriviti a Exercism per imparare e padroneggiare Scala con 95 esercizi e il mentoring di persone reali, tutto gratis.

Approfondimento su Luhn!

Esploriamo 8 versioni diverse di Luhn, partendo da un'implementazione Ruby molto pulita, passando per alcuni approcci imperativi e funzionali, e arrivando a una versione SQLite che ha richiesto un po' di lavoro a Erik e Jeremy per essere decifrata!