• 根据身份证号码获取身份证信息(省市县、出生日期、性别)


    首先弄懂身份证上数字都代表什么意思?

    • 1-2位为省、自治区、直辖市代码;
    • 3-4位为地级市、盟、自治州代码;
    • 5-6位为县、县级市、区代码;
    • 7-14位为出生年月日,比如19950301代表19957年3月1日出生;
    • 15-17位为顺序码,是同一地址码所标示的区域范围内,对同年同月同日生的居民编订的顺序码。其中第17位表示性别,男性为单数,女性为双数;
    • 18位为作为尾号的校验码,是由号码编制单位按照统一公式,通过前17位数字计算出来的。

    知道了这些就好获取信息了。
    效果展示:
    在这里插入图片描述
    接口:
    为了测试,在接口中把身份证号码写死。

    @GetMapping("/getIdCardInfo")
        public String getIdCardInfo() {
            String idCard = "37172119950321483x";
            //substring(x,y),从第x位开始截取,到第y位。
            String provinceId = idCard.substring(0, 6);
            String cardInfoAddress = addressProvinceService.getIdCardInfo(provinceId);
            String year = idCard.substring(6, 10);
            String month = idCard.substring(10, 12);
            String day = idCard.substring(12, 14);
            String gender = idCard.substring(16, 17);
            String inCardInfo="地址:" + cardInfoAddress + ",出生日期:" + year + ",月:" + month + ",日:" + day + ",性别:" + getGenderByIdCard(gender);
            System.out.println(inCardInfo);
            return inCardInfo;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    备注:
    addressProvinceService.getIdCardInfo(provinceId);是查询地区信息,每一个省市县的信息都在数据库存储,方法中包含的SQL是:
    getGenderByIdCard(gender);是一个性别工具类。详情见文章最后。

    	SELECT
    	CONCAT(a.`name` , b.`name` , c.`name`)  as '地址'
    	FROM
    	address_province a,
    	address_city b,
    	address_country c
    	WHERE
    	a.id=b.province_id and
    	b.id=c.city_id and
    	c.id=#{query}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    地区获取表连接:
    省份地址SQL数据
    市区地址SQL数据
    县地区SQL数据

    性别工具类代码:

    package com.excel.util;
    
    /**
     * @author lenovo
     * @date 2022/4/20
     */
    public class GenderUtil {
        /**
         * 男/女/未知 转换成 1/0/2
         * @param gender 男/女
         * @return
         */
        public static String getGenderNum(String gender) {
            if ("男".equals(gender)) {
                return "1";
            } else if ("女".equals(gender)) {
                return "0";
            } else {
                return "2";
            }
        }
        /**
         * 1/0/2 转换成 男/女/未知
         * @param gender
         * @return
         */
        public static String getGenderByNum(String gender) {
            if ("1".equals(gender)) {
                return "男";
            } else if ("0".equals(gender)) {
                return "女";
            } else {
                return "未知";
            }
        }
        /**
         * 根据身份证倒数第二位获取性别  单数男/双数女
         * @param gender
         * @return
         */
        public static String getGenderByIdCard(String gender) {
            int sex= Integer.parseInt(gender);
            return ((sex%2==1) ? "男" : "女");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    Spring的事务
    java计算机毕业设计学生请假系统演示源码+mysql数据库+lw文档+系统+调试部署
    Springboot毕设项目环球视野网站92i41(java+VUE+Mybatis+Maven+Mysql)
    颠覆IoT行业的开发神器!涂鸦智能重磅推出TuyaOS操作系统【程序员必备】
    JavaScript的使用
    模块语法笔记
    springboot+vue+Elementui班级事务管理系统
    Linux内存管理(一):管理机制简述
    【优化分配】粒子群算法求解火车票分配优化问题【含Matlab源码 1137期】
    大数据学习之Spark基础
  • 原文地址:https://blog.csdn.net/XuDream/article/details/124296640