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日

相关文章

  • Java利用Phantomjs实现生成图片的功能

    如何利用Java和PhantomJS实现生成图片的功能? PhantomJS是一个基于Webkit的无界面浏览器。它可以执行JavaScript脚本,模拟浏览器行为,并生成网页截图、PDF文件以及SVG等我们所需要的格式。 下面是Java利用Phantomjs实现生成图片的详细攻略。 下载Phantomjs 下载最新版的PhantomJS。在终端中输入以下命…

    Java 2023年6月16日
    00
  • Java JVM编译策略案例详解

    当我们编写Java程序时,代码是无法直接被计算机识别的,需要通过一种特殊的编译器将其转换成可被计算机执行的字节码,而Java虚拟机(JVM)则负责将字节码解释为对应的机器指令并执行。在这个过程中,JVM的编译器对字节码的编译策略扮演着重要的角色,选择合适的编译策略有助于提高程序执行效率。下面将详细讲解Java JVM编译策略的攻略,包括编译模式、编译等级、缓…

    Java 2023年5月19日
    00
  • Java找不到或无法加载主类及编码错误问题的解决方案

    以下是关于“Java找不到或无法加载主类及编码错误问题的解决方案”的完整攻略: 什么是“Java找不到或无法加载主类及编码错误问题”? 在Java程序中可能会出现“找不到或无法加载主类”错误和“编码错误”的问题。这类问题一般出现在程序运行时,这个错误会导致程序无法正常运行,需要进行相应的修复。 造成问题的原因 主类文件位置不正确或文件名拼写错误 classp…

    Java 2023年5月20日
    00
  • SpringMVC框架搭建idea2021.3.2操作数据库的示例详解

    下面我会详细讲解“SpringMVC框架搭建idea2021.3.2操作数据库的示例详解”的完整攻略。 1. 搭建SpringMVC框架和数据库 下载配置Tomcat 首先要下载配置Tomcat,可在官网下载二进制安装包,并在IDEA中进行配置。 创建新的项目 在IDEA中创建SpringMVC项目,选择“SpringMVC”模板即可。 配置SpringMV…

    Java 2023年5月20日
    00
  • JavaSpringBoot报错“MethodArgumentTypeMismatchException”的原因和处理方法

    当使用Java的Spring Boot框架时,可能会遇到“MethodArgumentTypeMismatchException”错误。这个错误通常是由以下原因之一引起的: 参数类型不匹配:如果控制器方法的参数类型与请求参数类型不匹配,则可能会出现此错误。在这种情况下,需要确保控制器方法的参数类型与请求参数类型匹配。 参数格式不正确:如果请求参数格式不正确,…

    Java 2023年5月5日
    00
  • asp.net中利用Jquery+Ajax+Json实现无刷新分页的实例代码

    首先我们需要了解一下如何在ASP.NET中使用jQuery和AJAX。在ASP.NET中,我们可以使用JavaScriptSerializer对象将对象序列化为JSON格式,然后将其返回给客户端。 以下是实现无刷新分页的详细流程和实例代码: 第一步:添加必要的JavaScript库 我们需要在网站中添加jQuery和Ajax的库文件。可以手动下载这些库文件并…

    Java 2023年5月19日
    00
  • Java基础学习之关键字和变量数据类型的那些事

    Java基础学习之关键字和变量数据类型的那些事 一、关键字 Java中有一些单词是具有特殊含义的,这些单词被称为关键字。我们不能将关键字用作标识符(变量名、方法名等)。Java中共有50个关键字,其中一部分已经不再使用,比如goto、const等。下面列出常用的关键字: abstract default if private this boolean do …

    Java 2023年5月20日
    00
  • SpringBoot 中使用JSP的方法示例

    Spring Boot是一个轻量级的框架,它可以快速地构建基于Java的Web应用程序。相比于Spring Framework而言,Spring Boot带来了更加方便的配置方式,同时也提供了一些默认的配置,让开发者快速构建应用程序。但是,在默认的情况下,Spring Boot并不支持JSP作为视图层,若要使用JSP需要另外进行配置。下面就是Spring B…

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