simple_luhn/lib.rs
1pub fn luhn(num: &str) -> bool {
2 let mut sum = 0;
3 let mut double = false;
4
5 for ch in num.chars().rev() {
6 if let Some(mut digit) = ch.to_digit(10) {
7 if double {
8 digit *= 2;
9 if digit > 9 {
10 digit -= 9;
11 }
12 }
13 sum += digit;
14 double = !double;
15 } else {
16 // Non-digit character -> invalid
17 return false;
18 }
19 }
20 sum % 10 == 0
21}