Skip to main content

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}