java身份证验证代码实现

yizhihongxing

下面是 “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日

相关文章

  • ajax详解_动力节点Java学院整理

    AJAX详解 什么是AJAX AJAX(Asynchronous JavaScript and XML)即异步 JavaScript 和 XML,是一种在Web页面中实现异步数据交互的通信技术。它的核心是 XMLHttpRequest 对象,它可以在不刷新页面的情况下发送和接收数据。 AJAX的优点 页面无需刷新,数据实时更新 能够异步加载数据,减少页面加载…

    Java 2023年5月26日
    00
  • 深入解析Java的Spring框架中的混合事务与bean的区分

    深入解析Java的Spring框架中的混合事务与bean的区分,这是一个比较广泛的话题,我们可以从以下几个方面进行讲解: Spring框架事务管理的概述 Spring混合事务的定义与原理 Spring Bean的定义与作用 如何区分Spring混合事务与Bean 1. Spring框架事务管理的概述 Spring框架中的事务管理是一种重要的机制,可以帮助我们…

    Java 2023年5月20日
    00
  • spirngmvc js传递复杂json参数到controller的实例

    下面是关于“Spring MVC中如何传递复杂JSON参数到Controller”的完整攻略,包含两个示例说明。 Spring MVC中如何传递复杂JSON参数到Controller 在Spring MVC中,我们可以使用AJAX来传递复杂JSON参数到Controller。本文将介绍如何实现这一功能。 示例1:使用@RequestBody注解 1. 编写前…

    Java 2023年5月17日
    00
  • Springboot项目使用html5的video标签完成视频播放功能

    下面是详细的讲解。 1. 引入video.js库 在静态文件目录(如:resources/static/)中引入video.js的库文件。 <link href="https://vjs.zencdn.net/7.11.4/video-js.css" rel="stylesheet" /> <scri…

    Java 2023年5月20日
    00
  • El表达式使用问题javax.el.ELException:Failed to parse the expression的解决方式

    针对“El表达式使用问题javax.el.ELException:Failed to parse the expression的解决方式”的解决方案,我给出以下完整攻略: 1. 什么是El表达式 El表达式(Expression Language Expression)是一种用来获取或者设置JavaBean中属性值的小型脚本语言。它可以简化JSP页面中所需表…

    Java 2023年6月2日
    00
  • Java 判断实体对象及所有属性是否为空的操作

    Java 判断实体对象及所有属性是否为空的操作是日常开发中经常遇到的问题之一,可以用来对数据进行合法性校验。下面将详细介绍如何实现该操作的完整攻略。 判断实体对象是否为空 判断实体对象是否为空可以通过对实体对象本身进行判断的方法实现。我们可以使用 Java 中的 == 或 null 进行判断。 示例: public boolean isObjectNull(…

    Java 2023年5月26日
    00
  • Mybatis 入门之MyBatis环境搭建(第一篇)

    “Mybatis 入门之MyBatis环境搭建(第一篇)”文章是介绍如何在Java环境下使用MyBatis框架的文章。其中包含了如何搭建MyBatis框架所需要的环境及相关配置,在此我们可以按照以下步骤完成: 环境准备 步骤一:安装JDK MyBatis框架是基于Java语言开发的,因此需要先安装JDK环境。可以上官网下载Java SE Developmen…

    Java 2023年5月20日
    00
  • Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)

    Java实现超大Excel文件解析攻略 本文介绍使用Java解析超大的Excel文件的方法。Excel文件往往包含大量的数据,有些时候,数据量可能非常之大,如果使用常规的Excel解析方式,很容易出现内存溢出的问题。本文将介绍XSSF、SXSSF和easyExcel三种解析方式,并且对它们进行详细分析和对比。 XSSF XSSF是POI中的一种Excel解析…

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