Rust实现Luhn算法

什么是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;
}
复制代码

 

 

posted @   johnny_zhao  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
历史上的今天:
2021-12-25 474. Ones and Zeroes
点击右上角即可分享
微信分享提示