java身份证验证代码实现

下面是 “java身份证验证代码实现”的完整攻略。

1. 身份证号码规则

身份证号码规则如下:

  • 身份证号码为18位数字和字母(除最后一位是字母外)
  • 前17位为地区码和出生日期码,最后一位为校验码
  • 校验码计算方法:
  • 取出前17位数字(地区码和出生日期码),按权重分别乘以7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2
  • 对乘积求和
  • 将和数除以11,得到余数(可能为0~10)
  • 余数0~9直接作为校验码,余数10用字母X表示

2. Java实现身份证验证代码

在 Java 中实现身份证验证,需要借助正则表达式和日期格式化,实现代码如下:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IdCardUtils {

    // 18位身份证正则表达式
    private static final String ID_CARD_REGEXP = "^\\d{17}(\\d|X)$";

    /**
     * 验证身份证号码是否合法
     *
     * @param idCard 身份证号码
     * @return 是否合法
     */
    public static boolean isValid(String idCard) {
        // 验证格式是否正确
        if (!Pattern.matches(ID_CARD_REGEXP, idCard)) {
            return false;
        }

        // 验证校验码是否正确
        int[] weight = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        String[] codeArr = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
        int sum = 0;
        for (int i = 0; i < 17; i++) {
            sum += (idCard.charAt(i) - '0') * weight[i];
        }
        String code = codeArr[sum % 11];
        return code.equals(idCard.substring(17));
    }

    /**
     * 获取身份证号码中的出生日期
     *
     * @param idCard 身份证号码
     * @return 出生日期(字符串形式)
     * @throws ParseException 解析异常
     */
    public static String getBirthday(String idCard) throws ParseException {
        String birthdayStr = idCard.substring(6, 14);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(sdf.parse(birthdayStr));
        return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
    }

    // 测试
    public static void main(String[] args) throws ParseException {
        String idCard1 = "110101199003076810";
        String idCard2 = "11010119900307681X";
        System.out.println(idCard1 + " 是否合法:" + isValid(idCard1));
        System.out.println(idCard2 + " 是否合法:" + isValid(idCard2));
        System.out.println(idCard1 + " 出生日期:" + getBirthday(idCard1));
        System.out.println(idCard2 + " 出生日期:" + getBirthday(idCard2));
    }
}

运行上面的测试代码,可以得到以下输出:

110101199003076810 是否合法:true
11010119900307681X 是否合法:true
110101199003076810 出生日期:1990-03-07
11010119900307681X 出生日期:1990-03-07

3. 示例说明

在实际开发中,可以应用身份证验证代码来验证用户输入的身份证号码是否符合规范,例如:

示例 1:用户在注册页面填写个人信息,其中需要填写身份证号码,那么就可以在提交表单时,调用身份证验证代码,对用户输入的身份证号码进行验证。如果不符合规范,提示用户重新填写。如果符合规范,可以计算出用户的出生日期等信息,方便后续使用。

示例 2:后台管理系统中,可以将用户身份证号码保存到数据库中,并提供身份证号码查询功能。此时,可以在查询操作时,调用身份证验证代码,对用户输入的身份证号码进行验证,保证查询条件的合法性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java身份证验证代码实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JAVA基于SnakeYAML实现解析与序列化YAML

    下面就是“JAVA基于SnakeYAML实现解析与序列化YAML”的完整攻略。 什么是YAML? YAML是一种轻量级的数据交换格式,它特别适合于人类编辑或查看。与JSON、XML等数据格式相比,它更为简洁、易于理解和编写,而且可以支持嵌套的数据结构。 SnakeYAML是什么? SnakeYAML是一个Java库,提供对YAML的解析和生成。通过Snake…

    Java 2023年5月26日
    00
  • jsp中sitemesh修改tagRule技术分享

    下面我将详细讲解“JSP中Sitemesh修改tagRule技术分享”的完整攻略。 简介 Sitemesh是一款用于Web页面装饰的框架,可以将公共的页面模板与动态生成的内容进行分离。在使用Sitemesh的过程中,可以通过修改tagRule来自定义标签的使用规则,并且可以根据需求进行灵活调整。 修改tagRule的步骤 1. 创建自定义的tagRule 在…

    Java 2023年6月15日
    00
  • JavaSpringBoot报错“HttpMediaTypeNotAcceptableException”的原因和处理方法

    原因 “HttpMediaTypeNotAcceptableException” 错误通常是以下原因引起的: 媒体类型不可接受:如果您的媒体类型不可接受,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们可接受。 媒体类型不正确:如果您的媒体类型不正确,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们正确。 解决办法 以下是…

    Java 2023年5月4日
    00
  • 简单实现Java web服务器

    请先让我简单介绍一下Java web服务器是什么:Java web服务器是通过Java编写的用于处理HTTP请求的服务器。它可以处理静态内容和动态内容。与其他Web服务器不同,Java web服务器通常可以执行Java Servlets和JavaServer Pages(JSP)等代码,以生成动态内容。下面是Java web服务器实现的完整攻略: 1. 确定…

    Java 2023年5月18日
    00
  • spring与mybatis整合配置文件

    整合Spring和MyBatis可以提高应用程序的可扩展性和可维护性。下面是在Spring项目中如何整合MyBatis的完整攻略: 1.添加依赖 首先,需要在pom.xml文件中引入mybatis-spring依赖。 <!– MyBatis-Spring Integration –> <dependency> <groupI…

    Java 2023年5月31日
    00
  • Mybatis拦截器的实现介绍

    Mybatis拦截器的实现介绍 什么是Mybatis拦截器? Mybatis拦截器是一个在执行SQL语句的过程中,能够拦截到SQL执行的各个环节的组件。它可以在SQL执行过程中进行自定义的操作,比如修改SQL、动态生成SQL等。Mybatis内置了一些拦截器,如分页插件、SQL打印插件等。 实现一个自定义的Mybatis拦截器 要实现一个自定义的Mybati…

    Java 2023年5月20日
    00
  • JSP代码实现 金字塔(倒置)示例

    下面我将为你详细讲解“JSP代码实现金字塔(倒置)示例”的完整攻略。 1. 编写 JSP 页面 我们首先需要编写一个 JSP 页面来实现金字塔倒置的功能。在 JSP 页面中,我们需要使用嵌入式 Java 代码来实现金字塔倒置的逻辑。以下是一个示例的 JSP 页面: <%@ page language="java" contentTy…

    Java 2023年6月15日
    00
  • JAVA实现JSON后端向前端传递数据

    下面是详细讲解“JAVA实现JSON后端向前端传递数据”的完整攻略,包括以下内容: 引入JSON库 构造数据对象 将数据对象转化为JSON格式 向前端发送JSON格式数据 其中,步骤2和步骤3可以根据实际需求进行调整。 引入JSON库 Java中,我们可以使用第三方库来实现JSON格式数据的生成和解析,常用的库有GSON和Jackson。这里以GSON为例,…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部