diff --git a/subjects/luhn_algorithm/README.md b/subjects/luhn_algorithm/README.md new file mode 100644 index 00000000..518d672b --- /dev/null +++ b/subjects/luhn_algorithm/README.md @@ -0,0 +1,62 @@ +## 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 +$ +```