29
2012
05

C#中判断身份证号是否正确的方法并获取身份证出生日期和性别

身份证判断是否正确并提取出出生日期和性别等信息,18位的身份证,前面六位代表了你户籍所在地,第七位到第十四位代表了你的出生年月,第十五位到第十七为代表了你的性别(偶数为女,奇数为男),根据这一信息,我在系统开发的录入员工的身份证后控件焦点转移时根据身份证号码获得生日和性别。下面是从网上找的一些代码,进过组合后:
最近,在一个项目中想判断输入的身份证号是否正确,则自己编写了一个用于判断身份证号是否正确的方法,用于判断用户输入的身份证号是否合法。因为当时项目比较急,写的方法也比较潦草,也没有进行优化,在使用过程中还未发现有错误。
这个方法能够判断15位的身份证号和18位的身份证号。
        /// <summary>
        /// 判断字符串是否为身份证号
        /// </summary>
        /// <param name="strCardCode">输入的字符串</param>
        /// <returns>bool:是否为身份证号</returns>
        public static bool IsCardCode(string strCardCode)
        {
            bool isRight = true;
            if (strCardCode.Length != 18 && strCardCode.Length != 15)
                return false;
            else if (strCardCode.Length == 15)
            {
                try
                {
                    Convert.ToInt64(strCardCode);
                }
                catch
                {
                    return false;
                }            }
            else if (strCardCode.Length == 18)
            {
                string[] prov ={"11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41","42","43","44","45","46","50",
                    "51","52","53","54","61","62","63","64","65","81","82"};
                string s1 = strCardCode.Substring(0, 2);
                string s2 = strCardCode.Substring(0, 17);
                string s3 = strCardCode.Substring(6, 8);
                string s4 = s2.Substring(16, 1);
                try
                {
                    Convert.ToInt64(s2);
                }
                catch
                {
                    return false;
                }
                int iPos = 0;
                for (iPos = 0; iPos < prov.Length; iPos++)
                {
                    if (prov[iPos] == s1)
                        break;
                }
                if (iPos >= prov.Length)
                {
                    return false;
                }
                if (Convert.ToInt32(s3.Substring(0, 4)) < 1910 || Convert.ToInt32(s3.Substring(0, 4)) > (DateTime.Now.Year - 10))
                {
                    return false;
                }
                if (Convert.ToInt32(s3.Substring(4, 4).Substring(0, 2)) == 0 || Convert.ToInt32(s3.Substring(4, 4).Substring(0, 2)) > 12)
                {
                    return false;
                }
                int iTmp = Convert.ToInt32(s3.Substring(4, 4).Substring(2, 2));
                if (iTmp == 0 || iTmp > 31)
                {
                    return false;
                }
                if (strCardCode.Substring(17, 1).ToUpper() != "X")
                {
                    try
                    {
                        Convert.ToInt32(strCardCode.Substring(17, 1));
                    }
                    catch
                    {
                        return false;
                    }
                }
            }
            return isRight;
        }
注意:由于项目的特殊性,这个方法将1910年之前出生的以及小于10岁的身份证号视为非法号码,你可以根据需要进行修改。

通过身份证获取出生日期

        /// <summary>
        /// 通过身份证获取出生日期
        /// </summary>
        /// <param name="identitycard">身份证号</param>
        /// <returns>返回出生日期</returns>
        public DateTime GetAge(string identitycard,ref string sex )
        {
            try
            {
                string birthday = "";  
                if (identitycard.Length == 18)//处理18位的身份证号码从号码中得到生日和性别代码
                {
                    birthday = identitycard.Substring(6, 4) + "-" + identitycard.Substring(10, 2) + "-" + identitycard.Substring(12, 2);
                    sex = identitycard.Substring(14, 3);
                }
                if (identitycard.Length == 15)
                {
                    birthday = "19" + identitycard.Substring(6, 2) + "-" + identitycard.Substring(8, 2) + "-" + identitycard.Substring(10, 2);
                    sex = identitycard.Substring(12, 3);  //性别
                } 

               //性别代码为偶数是女性奇数为男性

                if (int.Parse(sex) % 2 == 0)
                {
                   
sex  = "";
                }
               
else
                {
                    sex
= "";
                }
            }

                if (birthday != "")
                {
                    return Convert.ToDateTime(birthday);
                }
                else
                {
                    return DateTime.MinValue;
                }
            }
            catch (Exception ex)
            {
                return DateTime.MinValue;
            }
        }

« 上一篇下一篇 »

评论列表:

1.淘宝开店培训  2012/5/30 11:53:55 回复该留言
我最不喜欢就是写这种程序了,我没有这种天分,博主,有哦,欢迎回访我的博客哦,我坚信,我的用心评论,你一定能看到并能回访我,要是能留个言,岂不是人生中最快乐的事~~ 我会经常来看你的
其实很简单的,只要符合标准就行了,有一个算法的。
3.小沿  2012/5/30 20:36:07 回复该留言
好东西,支持
4.黄岩模具  2012/5/31 15:38:37 回复该留言
写的不错了,期待更多的佳作哈
5.活塞杆  2012/5/31 22:03:12 回复该留言
再次支持了哦哦哦
6.贝雷桥  2015/5/18 11:58:04 回复该留言
技术真不是很懂。。。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。