mirror of
https://github.com/google/comprehensive-rust.git
synced 2025-03-30 17:28:20 +02:00
38 lines
1.1 KiB
Markdown
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}}
|
|
}
|
|
```
|