将15位身份证补全为18位身份证的算法示例详解

关于“将15位身份证补全为18位身份证的算法示例详解”的完整攻略,我可以提供以下内容:

问题背景

在进行一些需要身份证号码验证的操作时,我们有时会遇到15位的身份证号码无法通过验证的情况。这是因为目前国家规定的身份证号码都为18位。因此,如果我们需要将15位的身份证号码转换为18位的身份证号码,就需要进行一些补全操作。下面是一个示例。

算法详解

将15位身份证补全为18位身份证的算法通常有以下几个步骤:

  1. 在第6、7位数字插入19,将15位身份证转换为17位身份证。
  2. 对17位身份证号码进行加权计算。
  3. 将加权计算出的结果对11取模得到余数。
  4. 根据余数和校验码对照表,找到对应的校验码。
  5. 将校验码加到17位身份证号码后面,得到18位身份证号码。

下面我们将对这个算法进行详细解释。

步骤一:插入19

这个步骤非常简单,就是在15位身份证号码的第6、7位数字之间插入“19”,把15位身份证号码转换为17位身份证号码。

举个例子,假设原来的15位身份证号码是421023670401110,那么转换为17位身份证号码后就是“42102319670401110”。

步骤二:加权计算

17位身份证号码中,每一位数字都有一个固定的加权因子,我们可以根据这些加权因子对17位身份证号码进行加权计算,得到一个加权和。

加权因子的计算方法如下:

  1. 将身份证号码从左到右数,第1、2位的加权因子分别为7、9;
  2. 第3~8位的加权因子分别为7、9、10、5、8、4;
  3. 第9~17位的加权因子分别为2、1、6、3、7、9、10、5、8、4。

计算加权和的公式如下:

$S = S_1 \times W_1 + S_2 \times W_2 + S_3 \times W_3 + ... + S_{17} \times W_{17}$

其中,$S_i$表示身份证号码的第$i$位数字,$W_i$表示对应位数的加权因子。

以刚才的17位身份证号码为例,我们可以按照上述计算方法得到其加权和为:

$S = 4 \times 7 + 2 \times 9 + 1 \times 10 + 0 \times 5 + 2 \times 8 + 3 \times 4 + 6 \times 2 + 7 \times 1 + 0 \times 6 + 1 \times 3 + 1 \times 7 + 0 \times 9 + 4 \times 10 + 0 \times 5 + 1 \times 8 + 1 \times 4 + 0 \times 2 = 202$

步骤三:取模运算

对加权和进行取模运算,得到一个余数。公式如下:

$R = S \mod 11$

其中,$R$表示余数。

接着,我们需要根据余数值来查找对应的校验码。校验码的对照表如下:

余数 校验码
0 1
1 0
2 X
3 9
4 8
5 7
6 6
7 5
8 4
9 3
10 2

例如,刚才的余数是2,查表可知其对应的校验码是“X”。

步骤四:添加校验码

根据校验码表得到的校验码,将其添加到17位身份证号码的最后,得到最终的18位身份证号码。

例如,刚才的17位身份证号码是“42102319670401110”,而根据步骤三计算得到的校验码是“X”,因此最终的18位身份证号码是“42102319670401110X”。

示例

下面给出一个具体的示例,让大家更好地理解这个算法。

假设有一个15位身份证号码是“110101800101360”,我们需要将其转换为18位身份证号码。按照上述步骤,具体操作如下:

  1. 在第6、7位数字插入“19”,得到17位身份证号码“110101198001013604”。
  2. 进行加权计算,得到加权和$S=121$。
  3. 对加权和$S$进行取模运算,得到余数$R=7$。
  4. 查表得到校验码为“5”。
  5. 将校验码“5”加到17位身份证号码后面,得到最终的18位身份证号码为“1101011980010136045”。

另外,需要注意的是,如果转换后的身份证号码中有“X”或者“x”,那么这个字母对应的实际数字是10。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:将15位身份证补全为18位身份证的算法示例详解 - Python技术站

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

相关文章

  • SpringBoot常用注解详细整理

    SpringBoot常用注解详细整理 什么是SpringBoot注解 Spring Boot提供了许多注解来简化Spring应用程序的开发和配置。在Spring中,注解使得我们能够重用代码、简化配置和提供了一致性数据。Spring Boot重度依赖注解,是设计成可以快速使用注解来进行Spring应用程序的开发和配置,从而节省了开发人员的时间和精力。 常用注解…

    Java 2023年5月15日
    00
  • Java8新特性之深入解析日期和时间_动力节点Java学院整理

    Java8新特性之深入解析日期和时间_动力节点Java学院整理 为什么需要新的日期和时间API Java早期的日期和时间API出现了很多问题,如: API不一致:Java提供了大量日期和时间API,但它们之间的API不一致,这使得编写日期和时间代码非常困难。 可变性:Java早期的日期和时间API中的大多数类都是可变的,这意味着我们可以随时更改日期和时间,这…

    Java 2023年6月1日
    00
  • Java提取两个字符串中的相同元素方法

    当我们需要提取两个字符串中相同的元素时,可以采用以下两种方法: 方法一:利用Java集合框架的交集函数 Java集合框架提供了intersection函数可以方便的求出两个已知集合的交集,因此我们可以将两个字符串分别转化为字符数组,然后再转化为集合,最后求出它们的交集。 示例一: String str1 = "abcde"; String…

    Java 2023年5月27日
    00
  • JavaWeb Listener 利用Session统计在线人数

    下面我将详细讲解“JavaWeb Listener 利用Session统计在线人数”的完整攻略。 什么是Listener Listener 是 JavaWeb 中的一种组件,用于监听某一种事件的发生,并在适当的时候做出反应。常用的一些监听器有 ServletContextListener、HttpSessionListener、ServletRequestL…

    Java 2023年6月15日
    00
  • 如何自己动手写SQL执行引擎

    如何自己动手写SQL执行引擎 要自己动手写一个SQL执行引擎,需要掌握以下几个步骤: 设计关系型数据库 构建SQL解析器 构建执行计划 执行查询语句 下面逐个步骤进行详细讲解: 设计关系型数据库 在设计关系型数据库时,需要考虑以下几个方面: 数据表设计:每个表需要设计对应的字段、数据类型、主键等信息。 索引设计:需要根据查询需求设计合适的索引,提高查询效率。…

    Java 2023年6月16日
    00
  • 2021年最新Redis面试题汇总(3)

    注意:为了更好的呈现Markdown格式,下文中有些地方的符号用中文描述而不是直接使用符号。但这并不影响文本的正确性。 2021年最新Redis面试题汇总(3)——完整攻略 题目概述 本文是“2021年最新Redis面试题汇总(3)”的完整攻略。本篇文章共包括14个Redis面试题,均为比较高级的面试题,适用于Redis高级岗位的面试。 Redis是目前非常…

    Java 2023年5月19日
    00
  • Java string.trim()究竟去掉了什么

    下面是对Java中string.trim()函数的详细讲解。 首先,string.trim()函数是用来移除字符串两侧空白字符的。所谓的空白字符包括空格、制表符、换行符等等。这个函数会返回一个新的字符串,原字符串并未被改变。 例如,如果我们有一个字符串 ” Hello, World! ” ,那么我们可以通过 string.trim() 来去掉字符串两侧的空白…

    Java 2023年5月20日
    00
  • 原生JS实现$.param() 函数的方法

    当我们使用jQuery库时,我们通常使用$.param()函数来将一个对象序列化为一个字符串形式的参数列表,以便可以在URL,Ajax请求等中使用。但是如果我们需要在没有引入jQuery的情况下使用该函数,我们可以考虑使用原生JS来实现。 下面是用原生JS实现$.param()函数的方法: 1. 将一个对象序列化为查询字符串 将一个对象序列化为查询字符串的方…

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