1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-03-30 17:28:20 +02:00
2024-06-25 09:40:56 -04:00

38 lines
1.1 KiB
Markdown

---
minutes: 30
---
# Exercise: Luhn Algorithm
# Luhn Algorithm
The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used to
validate credit card numbers. The algorithm takes a string as input and does the
following to validate the credit card number:
- Ignore all spaces. Reject numbers with fewer than two digits.
- Moving from **right to left**, double every second digit: for the number
`1234`, we double `3` and `1`. For the number `98765`, we double `6` and `8`.
- After doubling a digit, sum the digits if the result is greater than 9. So
doubling `7` becomes `14` which becomes `1 + 4 = 5`.
- Sum all the undoubled and doubled digits.
- The credit card number is valid if the sum ends with `0`.
The provided code provides a buggy implementation of the luhn algorithm, along
with two basic unit tests that confirm that most of the algorithm is implemented
correctly.
Copy the code below to <https://play.rust-lang.org/> and write additional tests
to uncover bugs in the provided implementation, fixing any bugs you find.
```rust
{{#include exercise.rs:luhn}}
{{#include exercise.rs:unit-tests}}
}
```