Luhn

Luhn

Μέτριο

Οδηγίες

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

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

Ο στόχος είναι να ελέγξεις αν μια δεδομένη συμβολοσειρά είναι έγκυρη.

Έλεγχος ενός αριθμού

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

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

4539 3195 0343 6467

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

4_3_ 3_9_ 0_4_ 6_6_

Αν ο διπλασιασμός του αριθμού δώσει αποτέλεσμα μεγαλύτερο από το 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 Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Pharo Exercism

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

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

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

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