Luhn

Luhn

Μέτριο

Εισαγωγή

Στην Global Verification Authority, μόλις σου ανατέθηκε μια κρίσιμη αποστολή. Σε όλη την πόλη, από τις ηλεκτρονικές αγορές μέχρι τις ασφαλείς συνδέσεις, αμέτρητες λειτουργίες βασίζονται στην ακρίβεια αριθμητικών αναγνωριστικών, όπως αριθμοί πιστωτικών καρτών, αριθμοί τραπεζικών λογαριασμών, κωδικοί συναλλαγών και αναγνωριστικά παρακολούθησης. Ο αλγόριθμος Luhn είναι ένας απλός τύπος αθροίσματος ελέγχου που χρησιμοποιείται για να διασφαλίζει ότι αυτοί οι αριθμοί είναι έγκυροι και χωρίς λάθη.

Μια παρτίδα αναγνωριστικών μόλις έφτασε στο γραφείο σου. Όλα πρέπει να περάσουν τη δοκιμή Luhn για να επιβεβαιωθεί ότι είναι νόμιμα. Αν κάποιο αποτύχει, θα σημανθεί ως μη έγκυρο, αποτρέποντας έτσι λάθη ή απάτες, όπως λανθασμένες συναλλαγές ή μη εξουσιοδοτημένη πρόσβαση.

Μπορείς να φροντίσεις να γίνει σωστά; Η ακεραιότητα πολλών υπηρεσιών εξαρτάται από εσένα.

Οδηγίες

Προσδιόρισε αν ένας αριθμός πιστωτικής κάρτας είναι έγκυρος σύμφωνα με τον τύπο του Luhn.

Ο αριθμός θα σου δοθεί ως συμβολοσειρά.

Επικύρωση ενός αριθμού

Συμβολοσειρές μήκους 1 ή μικρότερου δεν είναι έγκυρες. Τα κενά επιτρέπονται στην είσοδο, αλλά θα πρέπει να αφαιρούνται πριν από τον έλεγχο. Όλοι οι άλλοι χαρακτήρες που δεν είναι ψηφία δεν επιτρέπονται.

Παράδειγμα 1: έγκυρος αριθμός πιστωτικής κάρτας

4539 3195 0343 6467

Το πρώτο βήμα του αλγορίθμου Luhn είναι να διπλασιάσεις κάθε δεύτερο ψηφίο, ξεκινώντας από τα δεξιά. Θα διπλασιάσουμε

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

Αν ο διπλασιασμός του αριθμού δώσει αποτέλεσμα μεγαλύτερο του 9, τότε αφαίρεσε το 9 από το γινόμενο. Τα αποτελέσματα του διπλασιασμού μας:

8569 6195 0383 3437

Έπειτα άθροισε όλα τα ψηφία:

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

Αν το άθροισμα διαιρείται ακριβώς με το 10, τότε ο αριθμός είναι έγκυρος. Αυτός ο αριθμός είναι έγκυρος!

Παράδειγμα 2: μη έγκυρος αριθμός πιστωτικής κάρτας

8273 1232 7352 0569

Διπλασίασε τα δεύτερα ψηφία, ξεκινώντας από τα δεξιά

7253 2262 5312 0539

Άθροισε τα ψηφία

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

Το 57 δεν διαιρείται ακριβώς με το 10, οπότε αυτός ο αριθμός δεν είναι έγκυρος.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Scala Exercism

Έτοιμος να ξεκινήσεις την άσκηση Luhn;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Scala με 95 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.

Αναλυτική ματιά στο Luhn!

Εξερευνούμε 8 διαφορετικές εκδοχές του Luhn, ξεκινώντας από μια πολύ τακτοποιημένη υλοποίηση σε Ruby, περνώντας από κάποιες προστακτικές και συναρτησιακές προσεγγίσεις και καταλήγοντας σε μια έκδοση σε SQLite που χρειάστηκε αρκετή δουλειά από τον Erik και τον Jeremy για να την αποκρυπτογραφήσουν!