JAVA 18位身份证号码校验码的算法

我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。

什么是身份证号码校验码

身份证号码由17位数字和1位校验码组成(18位)。其中,前17位为身份证号码,最后一位为校验码。校验码一般都是用来检验身份证号码的正确性,通过校验码可以判断一个身份证号码是否是正确的身份证号码。

JAVA 18位身份证号码校验码算法

校验码的计算规则如下:

  1. 将前17位数字分别乘以对应的系数,系数如下:[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
  2. 将每个乘积相加。
  3. 将和除以11,取余数。余数对应的数字如下:[1,0,X,9,8,7,6,5,4,3,2]。其中,X对应的是10。

通过以上算法,即可得到最后一位校验码。

下面是JAVA代码示例:

public class IdCardUtils {
    private static final int[] FACTORS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    private static final int[] CHECK_CODES = {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2};

    /**
     * 计算18位身份证号码的校验码
     * @param idCardNo 前17位身份证号码
     * @return 校验码
     */
    public static String getCheckCode(String idCardNo) {
        int sum = 0;
        for (int i = 0; i < idCardNo.length(); i++) {
            char c = idCardNo.charAt(i);
            int n = c - '0';
            int factor = FACTORS[i];
            sum += n * factor;
        }

        int idx = sum % 11;
        return idx == 2 ? "X" : String.valueOf(CHECK_CODES[idx]);
    }
}

示例说明

下面是两个示例说明:

示例一

假设身份证号码的前17位是110101197001016854,则校验码的计算过程如下:

1. 分别将前17位数字和对应的系数相乘,并将乘积相加。
    1 * 7 + 1 * 9 + 0 * 10 + 1 * 5 + 0 * 8 + 1 * 4 + 1 * 2 + 9 * 1 + 7 * 6 + 0 * 3 + 0 * 7 + 1 * 9 + 6 * 10 + 8 * 5 + 5 * 8 + 4 * 4 + 2 * 2 = 238
2. 将和除以11,取余数。238 % 11 = 4。
3. 根据余数查找校验码对应的数字。校验码数组的下标从0开始,因此查找CHECK_CODES[4],得到3。
4. 所以,校验码为3。
5. 因此,身份证号码为1101011970010168543。

示例二

假设身份证号码的前17位是62072119880320726,则校验码的计算过程如下:

1. 分别将前17位数字和对应的系数相乘,并将乘积相加。
    6 * 7 + 2 * 9 + 0 * 10 + 7 * 5 + 2 * 8 + 1 * 4 + 1 * 2 + 9 * 1 + 8 * 6 + 8 * 3 + 0 * 7 + 3 * 9 + 2 * 10 + 0 * 5 + 7 * 8 + 2 * 4 + 6 * 2 = 356
2. 将和除以11,取余数。356 % 11 = 8。
3. 根据余数查找校验码对应的数字。校验码数组的下标从0开始,因此查找CHECK_CODES[8],得到4。
4. 所以,校验码为4。
5. 因此,身份证号码为620721198803207264。

以上就是JAVA 18位身份证号码校验码算法的详细攻略。希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA 18位身份证号码校验码的算法 - Python技术站

(1)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • springboot项目完整后端请求Controller层优雅处理

    那么我们先从介绍Spring Boot项目完整后端请求Controller层处理的一般流程开始: 了解请求方式:HTTP协议定义了很多不同的请求方式,常规的包括GET、POST、PUT、DELETE等,我们需要根据具体的业务场景选择合适的请求方式。 定义API接口:在Controller层中,我们需要定义一组或多组API接口,这些接口对应于前端的具体请求,需…

    Java 2023年5月19日
    00
  • 微信小程序实现注册登录功能(表单校验、错误提示)

    演示如何使用微信小程序实现注册登录功能,并使用表单校验和错误提示处理用户数据输入时可能发生的错误。 1. 注册功能 1.1 创建页面文件 首先需要创建一个新的页面,用于实现用户注册功能。在微信小程序的开发工具中,选择“添加页面”并命名新页面为register。 1.2 创建表单页面结构 在新页面的WXML文件中,创建表单页面结构。可以使用<form&g…

    Java 2023年5月20日
    00
  • Spring Boot中整合Spring Security并自定义验证代码实例

    下面我会详细讲解“Spring Boot中整合Spring Security并自定义验证代码实例”的完整攻略,包括整合过程和两条示例。 整合Spring Security Spring Security 是 Spring 家族中非常重要的一个子项目,用于提供安全认证和授权机制。在 Spring Boot 中,我们可以方便的整合 Spring Security…

    Java 2023年5月20日
    00
  • SpringBoot注册Filter的两种实现方式

    下面是关于“SpringBoot注册Filter的两种实现方式”的完整攻略。 在SpringBoot中,有两种方式可以注册Filter: 1. 通过@Configuration注解注册Filter 在SpringBoot中,可以通过在@Configuration类中添加@Bean注解的方式注册Filter。示例代码如下: @Configuration pub…

    Java 2023年5月15日
    00
  • JavaWeb开发入门第二篇Tomcat服务器配置讲解

    下面是对”JavaWeb开发入门第二篇Tomcat服务器配置讲解”的完整攻略: 1. 下载Tomcat服务器 首先需要到Tomcat的官网(https://tomcat.apache.org/)下载对应的版本,选择”Download”页面中的合适版本即可。下载完成后,解压到本地即可。 2. 配置环境变量 在操作系统中配置Tomcat服务器的环境变量可以让我们…

    Java 2023年5月20日
    00
  • Java自学书籍Top 10

    下面我详细介绍一下“Java自学书籍Top 10”的攻略: 一、为什么要学Java? 在介绍Java自学书籍的攻略之前,我们先来了解一下为什么要学Java。Java是目前使用比较广泛的编程语言之一,它具有以下特点: Java是一种跨平台的语言,可以在不同操作系统上运行。 Java具有比较好的可读性和易于维护性。 Java拥有庞大的用户群体和丰富的开源库,方便…

    Java 2023年5月23日
    00
  • 揭开汇编死循环的神秘面纱

    以下是”揭开汇编死循环的神秘面纱”的完整攻略。 关于汇编死循环 汇编语言中可能会出现死循环,它会执行无限次,直到程序被强行终止。这种情况通常是由于编写代码时的逻辑错误或故意编写的死循环。此类死循环对系统造成的负担很大,因为它们会一直占用系统资源。了解如何识别和消除死循环是编程中的重要知识点。 如何识别死循环 死循环通常是由于程序中的一个或多个操作导致了一种无…

    Java 2023年5月23日
    00
  • Java的Struts框架中登陆功能的实现和表单处理器的使用

    Java的Struts框架是一个MVC框架,它的优点是可以将业务逻辑和视图分开,方便管理。其中,登录功能是Web开发中一个非常基本的功能,而表单处理器则可以用于将表单请求中的数据映射到Java对象中。下面我将详细讲解Java的Struts框架中登陆功能的实现和表单处理器的使用的完整攻略。 Struts框架中登陆功能的实现 对于登陆功能的实现,Struts框架…

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