mirror of https://github.com/01-edu/public.git
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
63 lines
1.6 KiB
1 year ago
|
## 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
|
||
|
$
|
||
|
```
|