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.

63 lines
1.6 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.
An empty string or a number with only one digit will be considered an invalid number.
Spaces are accepted in the script but have to be stripped 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
- `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
$
```