什么是Luhn算法?
pub fn luhn(cc_number: &str) -> bool {
//scan number from right to left, the digit *2 which in every second position
if cc_number.is_empty() {
return false;
}
let chats = cc_number.chars();
let mut sum = 0;
let mut digits_seen = 0;
for (index, ch) in chats.rev().filter(|&ch| ch != ' ').enumerate() {
let mut num_ch = ch.to_digit(10);
match num_ch {
Some(d) => {
if (index + 1) % 2 == 0 {
let n = d * 2;
if n < 10 {
sum += n;
} else {
sum += n % 10 + n / 10;
}
} else {
sum += d;
}
digits_seen += 1;
}
None => return false
}
}
//return false if digits count less than 2
if digits_seen < 2 {
return false;
}
return sum % 10 == 0;
}