身份证号码验证 C#

本文介绍了一种通过输入18位身份证号码验证其有效性的算法,并在无效时建议生成一个有效的ID号。包括验证规则、生成逻辑及示例代码。

输入18位身份证号码, 提示号码是否是有效的,如果无效则建议一个有效身份证。

 

注: 前17位必须正确才能建议一个准确的ID 号。

 

        static void Main(string[] args)
        {
            bool isValid = true;
            string Id = "171126199702163111";
            char[] cId = Id.ToCharArray();
            if (cId.Length != 18)
                return;
            int sum = 0;
            int iter=18;

            for (int i = 0; i < cId.Length-1; i++)
            {
                int c = Int32.Parse(cId[i].ToString());
                int weight=Int32.Parse (Math.Pow(2, iter - 1).ToString ()) % 11;               
                sum += c * weight;
                iter--;
            }
            sum %= 11;
            int output = Int32.Parse(sum.ToString ());
            char validate = GetVerifyCode(output);

            if (validate == cId[cId.Length - 1])
            {
                isValid = true;
            }
            else
                isValid = false;

            StringBuilder recommendId = new StringBuilder();
            if (!isValid)
            {
                for (int i = 0; i < cId.Length - 1; i++)
                {
                    recommendId.Append(cId[i]);
                }
                recommendId.Append(validate);
            }
            else
            {
                recommendId.Append("your input is valid");
            }
            Console.WriteLine(isValid.ToString ());
            Console.WriteLine("recommend {0}",recommendId .ToString ());
        }

        static char GetVerifyCode(int output)
        {
            switch (output)
            {
                case 0: return '1'; 
                case 1: return '0'; 
                case 2: return 'X';
                case 3: return '9';
                case 4: return '8';
                case 5: return '7';
                case 6: return '6';
                case 7: return '5';
                case 8: return '4';
                case 9: return '3';
                case 10: return '2';
                default : return 'X';
            }
        }

 

转载于:https://www.cnblogs.com/qixue/archive/2013/06/06/3121638.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值