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

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

  • 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;
    }

备注:
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}

地区获取表连接:
省份地址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) ? "男" : "女");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XuDream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值