C#实现身份证号码校验的类

本文介绍了一种用于验证银行卡号有效性的算法实现。通过定义特定的因子和规则,该算法可以检查17位数的卡号主体部分,并通过计算得出最后一位校验码是否正确,从而判断输入的银行卡号是否有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class CardValidator
    {
        private const int Divisor = 11;
        private const int MinLen = 17;
        private static readonly List<int>  Factors=new List<int>()
        {
            7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
        };
        private static readonly Dictionary<int,string> Result=new Dictionary<int, string>()
        {
            {0,"1"},{1,"0"},{2,"X"},{3,"9"},{4,"9"},{5,"7"},{6,"6"},{7,"5"},{8,"4"},{9,"3"},{10,"2"}
        }; 
        private static readonly List<int> Products=new List<int>(); 

        public static bool IsValid(string cardNo)
        {
            if (string.IsNullOrEmpty(cardNo) || cardNo.Length <MinLen)
            {
                return false;
            }

            var subCard = cardNo.Substring(0, MinLen);
            for (var i=0;i<subCard.Length;i++)
            {
                int c;
                if (!int.TryParse(subCard.Substring(i,1), out c))
                {
                    return false;
                }
                Products.Add(c*Factors[i]);
            }

            var sum = Products.Sum();
            var mod = sum%Divisor;
            var val = Result[mod];

            return val == cardNo.Substring(cardNo.Length - 1, 1);
        }
    }

 

转载于:https://www.cnblogs.com/iot1024/p/5946235.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值