CSkin博客

标题: 【查询身份证信息】根据身份证号查询持有者信息 [打印本页]

作者: 乔克斯    时间: 2014-7-25 23:21
标题: 【查询身份证信息】根据身份证号查询持有者信息
根据身份证号查询持有者信息

  此程序是离线程序,在没有网的情况下也可以运行,原理也很简单,身份证号本身就包含着很多信息,比如生日,老家,年龄,这些都可以分析出来。

废话不多时,上图上码上附件。

效果图:


代码截图:




部分代码:
[C#] 纯文本查看 复制代码
        #region 查询身份证相关信息
        public static IDCard GetIDCard(string ID) {
            IDCard cd = new IDCard();
            if (CheckCard(ID.Trim()))//如果通过CheckCard方法验证成功
                {
                string card = ID.Trim();//获取输入的身份证号码
                if (card.Length == 15)          //如果输入的是15位的身份证号码,需要将其转换成18位
                    {
                    int[] w = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
                    char[] a = new char[] { '1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' };
                    string newID = "";
                    int s = 0;
                    newID = ID.Trim().Insert(6, "19");
                    for (int i = 0; i < 17; i++) {
                        int k = Convert.ToInt32(newID) * w;
                        s = s + k;
                    }
                    int h = 0;
                    Math.DivRem(s, 11, out h);
                    newID = newID + a[h];
                    card = newID;               //最后将转换成18位的身份证号码赋值给card
                }
                int addnum = Convert.ToInt32(card.Remove(6));//获取身份证号码中的地址码
                string numAddress = LoadAddress(addnum);
                if (numAddress != "")//如果存在
                    {
                    string address = numAddress;//获取地址码对应的归属地
                    string birthday = card.Substring(6, 8);//从身份证号码中截取出公民的生日
                    string byear = birthday.Substring(0, 4);//获取出生年份
                    string bmonth = birthday.Substring(4, 2);//获取出生月份
                    if (bmonth.Substring(0, 1) == "0")//如果月份是以0开头
                        {
                        bmonth = bmonth.Substring(1, 1);//去掉0
                    }
                    string bday = birthday.Substring(6, 2);//获取出生“日”
                    if (bday.Substring(0, 1) == "0")//如果“日”以0开头
                        {
                        bday = bday.Substring(1, 1);//去掉0
                    }
                    string sex = "";//性别
                    if (ID.Trim().Length == 15)//如果输入的身份证号码是15位
                        {
                        int PP = Convert.ToInt32(ID.Trim().Substring(14, 1)) % 2;//判断最后一位是奇数还是偶数
                        if (PP == 0)//如果是偶数
                            {
                            sex = "女";//说明身份证号码的持有者是女性
                        } else {
                            sex = "男";//如果是奇数则身份证号码的持有者是男性
                        }
                    }
                    if (ID.Trim().Length == 18)//如果输入的身份证号码是18位
                        {
                        int PP = Convert.ToInt32(ID.Trim().Substring(16, 1)) % 2;//判断倒数第二位是奇数还是偶数
                        if (PP == 0)//如果是偶数
                            {
                            sex = "女";//说明身份证号码的持有者是女性
                        } else {
                            sex = "男";//如果是奇数则身份证号码的持有者是男性
                        }
                    }
                    cd.Address = address;//显示身份证持有者的归属地
                    DateTime btime = new DateTime(Convert.ToInt32(byear), Convert.ToInt32(bmonth), Convert.ToInt32(bday));
                    cd.Birthday = btime;//显示身份证持有者的生日
                    cd.Zodiac = GetAtomFromBirthday(btime);//显示身份证持有者的星座
                    cd.Constellation = getZodiac(btime);//显示身份证持有者的生肖
                    cd.Age = DateTime.Now.Year - btime.Year;//显示身份证持有者的年龄
                    string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                    string sday = Day[Convert.ToInt16(btime.DayOfWeek)];
                    cd.TDayOfWeek = sday;
                    cd.Sex = sex;//显示身份证持有者的性别
                    cd.Msg = "合法的公民身份证号!";//显示验证结果
                    cd.CardNumber = ID;
                } else {
                    cd.Msg = "公民身份证号输入有误!";
                }
            } else {
                cd.Msg = "非法公民身份证号!";
            }
            return cd;
        }
        #endregion


身份证查询源码: 身份证验证器.rar (167.47 KB, 下载次数: 391)



作者: xiaobo    时间: 2014-7-26 08:38
居然这么长,,,,你把所有地区的编号写进去了- -?
作者: 乔克斯    时间: 2014-7-26 09:34
xiaobo 发表于 2014-7-26 08:38
居然这么长,,,,你把所有地区的编号写进去了- -?

差不多是这样的,为了不在外面多一个xml或者本地数据库,干脆写在类里还方便。
作者: 原始    时间: 2014-7-26 09:47
像这种东西,直接写在类里面是很方便的,况且这个也不会很大
作者: 乔克斯    时间: 2014-7-26 09:47
原始 发表于 2014-7-26 09:47
像这种东西,直接写在类里面是很方便的,况且这个也不会很大

嗯~是的
作者: xiaobo    时间: 2014-7-26 09:57
原始 发表于 2014-7-26 09:47
像这种东西,直接写在类里面是很方便的,况且这个也不会很大

确实,一般不需要更新.
作者: xiaobo    时间: 2014-7-26 09:57
原始 发表于 2014-7-26 09:47
像这种东西,直接写在类里面是很方便的,况且这个也不会很大

确实,一般不需要更新.
作者: 乔克斯    时间: 2014-7-26 10:05
xiaobo 发表于 2014-7-26 09:57
确实,一般不需要更新.

用标签把他收缩起来就好了。
作者: xiaobo    时间: 2014-7-26 10:29
乔克斯 发表于 2014-7-26 10:05
用标签把他收缩起来就好了。

感觉碍眼,我是不是有点神经病..
作者: 乔克斯    时间: 2014-7-26 10:46
xiaobo 发表于 2014-7-26 10:29
感觉碍眼,我是不是有点神经病..

不要在意,你本来就是。
作者: hguchen    时间: 2014-7-27 21:53
乔帮主梅州人?
作者: 乔克斯    时间: 2014-7-28 01:51
hguchen 发表于 2014-7-27 21:53
乔帮主梅州人?

是的,你也是么?
作者: wtujoxk    时间: 2014-7-29 09:24
牛人,膜拜!
作者: 心有千千结    时间: 2014-8-1 11:08
资料从哪里弄的啊!
作者: 乔克斯    时间: 2014-8-1 15:12
心有千千结 发表于 2014-8-1 11:08
资料从哪里弄的啊!

身份证号中提取的。
作者: eason_xy    时间: 2014-8-1 21:52
好牛逼。
作者: 569794982    时间: 2014-8-2 18:17
先下载 留着以后用
作者: bckrain    时间: 2014-8-29 20:56
地区编码不全,只有新的,老编码这里面没有
作者: bbspcs    时间: 2014-10-31 18:11
支持一下。
作者: 苏子阳    时间: 2014-12-12 02:41
聪明的小女神
作者: 腾讯科技    时间: 2014-12-15 02:24
我饿舞步
作者: hupo376787    时间: 2015-1-2 16:14
好牛叉啊
作者: 傲风残月    时间: 2015-1-4 11:34
看看,学习学习
作者: zoney88    时间: 2015-2-13 20:29
额。。刚科普了下,地区编码有那么多....
作者: 好人一生平安    时间: 2015-10-31 14:57
写的还不错
作者: xxxxxxxx    时间: 2015-11-3 22:05
好东西XIEXIE
作者: lelenet    时间: 2016-1-31 01:05
AForge.NET
作者: y1665780783    时间: 2016-1-31 18:04
有点意思
作者: Qyang    时间: 2016-3-19 02:23
刚好拿来查查东西
作者: coolhq    时间: 2018-12-16 14:07
多谢分享
作者: 河里的星星    时间: 2018-12-18 10:02
学习一个 ,感觉很给力
作者: jacksonwong    时间: 2019-5-25 12:10
谢谢分享!
作者: 在路上09284275    时间: 2019-9-20 20:53
离线都可以用,确实是个好东西,感谢楼主




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2