大陆居民身份证的奥秘

最近做项目的一个需求的时候才知道我们大陆居民身份证的奥秘,其实我们大陆具名身份证里面不仅仅是包含着我们的生日情况,而且还包含这我们的我们的性别信息。

这里是我们大陆居民身份证的一个说明文章:点击打开链接

好了补闲聊了。我们现在使用java来进行我们索要信息的获取:

1.首先我们从大陆居民身份证里面获取一个人的性别:看过文章的人我们知道身份证里的奥秘,关于新别的是15为的居民身份证是主要看最后一位的信息,如果是基数则表示主人是一位女性,如果是偶数则标识主人是一位男性。而18位的身份证呢,主要是看倒数第二位,也是基数男偶数女。但是呢最后一位是X的都是男性啦。好啦至于为神呢是因为是10的话我们的身份证有的人就有19位了,我们就用X来表示10.

好了我们来进行是用java进行性别的判断:
/**
 * Created by luyangli on 15-8-25.
 */
public class shenfengzheng {
    public static void main(String[] args) {

        String ssz = "XXX567198005040714";
        String lastValue = null;
        if (ssz.length() == 15) {
            lastValue = ssz.substring(ssz.length() - 1, ssz.length());
            if (StringUtils.equals(lastValue.toLowerCase(), "x")) {
                System.out.println("");
                return;
            } else {
                int sex = Integer.parseInt(lastValue) % 2;
                if (sex == 0) {
                    System.out.println("");
                } else {
                    System.out.println("");
                }
                return;
            }
        } else if (ssz.length() == 18) {
            lastValue = ssz.substring(ssz.length() - 1, ssz.length());
            if (StringUtils.equals(lastValue.toLowerCase(), "x")) {
                System.out.println("");
                return;
            } else {
                String validValue = ssz.substring(ssz.length() - 2, ssz.length() - 1);
                int sex = Integer.parseInt(validValue) % 2;
                if (sex == 0) {
                    System.out.println("");
                } else {
                    System.out.println("");
                }
                return;
            }
        }
    }
}

来看一下我们的结果是不是OK,这个是我的身份证号码,原谅我将他进行了乱改(隐私第一位):

======================
男

看来我是一个男人啊。。。

接下来我们进行身份证的另一个奥妙的理解就是用java进行生日的提取:
int len = ssz.length();
if (len != 18 || ssz == null) {
    System.out.println("省份证有误!");
    // return;
} else {
    String year = new StringBuilder().append(ssz.substring(6, 10)).toString();
    System.out.println(year);
    String mouth = new StringBuilder().append(ssz.substring(10, 12)).toString();
    System.out.println(mouth);
    String day = new StringBuilder().append(ssz.substring(12, 14)).toString();
System.out.println(day); String sr = new StringBuilder().append(year).append("-").append(mouth).append("-").append(day).toString(); System.out.println(sr); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = simpleDateFormat.parse(sr); System.out.println(date); System.out.println("======================"); } catch (ParseException e) { System.out.println("error"); }}

我们开看一下结果:

1980
05
04
1980-05-04
Sun May 04 00:00:00 CST 1980

OK,我们的任务今天完成了,其实我们的身份证还有很多的奥秘,我们来不理解,其实看看我们的介绍文章,其实还有省份等等的意义的蕴含。这里我有一篇参考的文章,大家可以看看:

点击打开链接



头像中的身份证号码并不能直接反映一个人的出生地信息,因为中国的居民身份证号码是由18位数字组成,分为前6位的行政区划码、接下来8位的出生日期码、第17位的性别码以及最后4位的顺序码和校验码。虽然前6位能够识别出省份和城市,但具体到区县和个人的具体出生地还需要结合其他信息查询,通常需要通过数据库匹配或官方户籍管理系统才能准确获取。 如果你想要编写一个简单的代码片段来模拟判断出生地,这通常是不可能的,因为涉及到敏感个人信息和隐私保护,而且实际操作会受限于法律法规。但在理论上,你可以设计一个函数接收身份证号作为输入,然后解析并显示前六个数字代表的地区信息,但这只限于展示,并不会访问真实的人口数据库: ```python def get_place_of_birth(oid): # 假设oid是一个字符串类型的简化版身份证号(仅包含前6位) province_code = oid[:2] city_code = oid[2:4] # 这里只是一个示例,实际中你需要查找对应的地区代码库 provinces = {"11": "北京市", "12": "天津市", ...} # 区域代码和名称对应字典 if province_code in provinces and city_code in provinces[province_code]: return f"该身份证的出生地可能是{provinces[province_code]}-{city_code}" else: return "无法确定精确的出生地" # 使用示例 print(get_place_of_birth("11010119900101XXXY")) # 输出:该身份证的出生地可能是北京市-市辖区 ``` 请注意,这个代码仅供教学演示,实际应用中处理身份证数据需遵守严格的法规和安全措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值