作者: 乔克斯
查看: 14969|回复: 35

主题标签Tag

打印 上一主题 下一主题

[源码] 【查询身份证信息】根据身份证号查询持有者信息

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2014-7-25 23:21:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查看: 14969|回复: 35
根据身份证号查询持有者信息

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

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

效果图:


代码截图:




部分代码:
[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[i]) * w[i];
                        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


身份证查询源码:


评分

参与人数 2金钱 +6 收起 理由
cskin + 1 神马都是浮云
xiaobo + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播
回复 论坛版权

使用道具 举报

沙发
xiaobo 发表于 2014-7-26 08:38:55 | 只看该作者
居然这么长,,,,你把所有地区的编号写进去了- -?
板凳
 楼主| 乔克斯 发表于 2014-7-26 09:34:41 | 只看该作者
xiaobo 发表于 2014-7-26 08:38
居然这么长,,,,你把所有地区的编号写进去了- -?

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

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

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

确实,一般不需要更新.
8#
 楼主| 乔克斯 发表于 2014-7-26 10:05:38 | 只看该作者
xiaobo 发表于 2014-7-26 09:57
确实,一般不需要更新.

用标签把他收缩起来就好了。
9#
xiaobo 发表于 2014-7-26 10:29:58 | 只看该作者
乔克斯 发表于 2014-7-26 10:05
用标签把他收缩起来就好了。

感觉碍眼,我是不是有点神经病..
10#
 楼主| 乔克斯 发表于 2014-7-26 10:46:49 | 只看该作者
xiaobo 发表于 2014-7-26 10:29
感觉碍眼,我是不是有点神经病..

不要在意,你本来就是。
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-4-20 17:08, Processed in 0.598744 second(s), 36 queries , Gzip On.

快速回复 返回顶部 返回列表