You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.7 KiB

## luhn_algorithm
### Instructions
Create a function which checks if a number is valid per the Luhn formula.
The function will receive a string and return a boolean.
**Invalid inputs:** An empty string or a number with only one digit are considered invalid.
**Handling spaces:** Spaces are accepted but have to be ignored during the calculation (in other words they won't affect the result).
The Luhn formula is used to check if a number is a valid credit card number and in some other scenarios where you need to check a number fast and without accessing a database.
We can summarize the formula as follow:
- We want to check the number `4539 3195 0343 6467`
- We take every second digit starting by the right
- We multiply those digits by 2
- If the result is more than 9 we subtract 9 from it
- We sum all the digits
- If sum is evenly divisible by 10 then this number is valid
So we will get:
- `4539 3195 0343 6467`
- `4_3_ 3_9_ 0_4_ 6_6_`: numbers to modify
- `8_6_ 6_9_ 0_8_ 3_3_`: modified numbers (for numbers over 9 we subtracted 9 already)
- `8569 6195 0383 3437`: the new sequence of digits
- `80`: the sum of all digits
- `80` is evenly divisible by 10 so the result is `true`
### Expected Function
```rust
pub fn is_luhn_formula(code: &str) -> bool {
}
```
### Usage
Here is a possible program to test your function,
```rust
fn main() {
println!("{}", is_luhn_formula(""));
println!("{}", is_luhn_formula("1"));
println!("{}", is_luhn_formula("79927398713"));
println!("{}", is_luhn_formula("7992 7398 713"));
println!("{}", is_luhn_formula("1234567890123456"));
}
```
And its output:
```console
$ cargo run
false
false
true
true
false
$
```