PHP实现15位身份证号转18位的方法分析

PHP实现15位身份证号转18位的方法分析

在国家实行全民身份证制度之前,早期颁发的身份证都只有15位号码,这些15位身份证号的最后一位校验码是随机生成的。在现在的全民身份证制度下,身份证号码都是18位,其中最后一位是通过前17位号码计算得出的校验码。对于一些老旧的记录系统或早期数据采集结果,需要将15位身份证号转换成18位,这就需要用到身份证号码的规则。

身份证号码规则

一、身份证号码结构

每位身份证号码的含义如下:

1-2位:表示省份,例如:11代表北京市;43代表湖南省。

3-4位:表示市区,例如:010代表北京市;0731代表湖南省长沙市。

5-6位:表示区县,例如:110101代表北京市东城区;430903代表湖南省湘潭市湘潭县。

7-14位:表示出生年月日。

15-17位:表示顺序,其中17位男性为单数,女性为双数;最后一位为校验码。

二、身份证号码校验规则

  1. 将身份证号码前17位数字分别乘以不同的系数,系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。

  2. 将得到的乘积相加后,除以11取余数。

  3. 根据余数,找到对应的校验码:0、1、2、3、4、5、6、7、8、9、10对应的校验码分别为:1、0、X、9、8、7、6、5、4、3、2。

  4. 将身份证号码第18位设置为校验码。

PHP实现15位身份证号转换成18位的方法

  1. 基本思路

将15位身份证号码转换成18位,需要先在原身份证号码后面加上2位数字表示“19”(如果出生日期在2000年前)或“20”(如果出生日期在2000年后),再计算并添加得出的18位校验码。

  1. 代码实现

下面是利用PHP实现将15位身份证号码转换成18位的代码示例:

function idcard_15to18($idcard){
    if(strlen($idcard)!=15){
        return false;
    }else{
        $result=[];
        $idcard_base=substr($idcard,0,6).'19'.substr($idcard,6,9);
        $sum=0;
        for($i=0;$i<17;$i++){
            $sum += (int)($idcard_base{$i}) * pow(2,17-$i)%11;
        }
        $check_code=['1','0','X','9','8','7','6','5','4','3','2'];
        array_push($result,$idcard_base.$check_code[$sum%11]);
        return $result[0];
    }
}

// 15位身份证号码转18位示例
$idcard='320922800801010';
echo idcard_15to18($idcard) // 将输出320922198008010018

// 非15位身份证号码转18位示例
$idcard='320922198008010018';
echo idcard_15to18($idcard) // 将输出false

代码解析:

(1) 第1行定义一个函数idcard_15to18(),用于将15位身份证号码转换成18位。
(2) 第2行判断传入的身份证号码长度是否为15,如果不是则返回false。
(3) 第4行新建一个数组$reuslt,存放执行结果。
(4) 第5行将15位身份证号码中的前6位和后9位拆分出来,中间再加上”19”(表示出生年份在1900年后且在2000年前)。
(5) 第6-12行计算新的18位身份证号码的17位校验码,重点代码是第8行,$sum的计算式为每位身份证号码的系数相乘再求和,其中17-$i表示身份证号码从左到右的位数,pow(2,17-$i)%11表示系数的计算公式,%11是为了取余数。
(6) 第13行将计算出来的18位身份证号码和17位校验码结合起来,以字符串形式返回。

  1. 总结

通过上面的代码示例,我们可以看到,将15位身份证号转换成18位可以利用身份证号码结构和校验规则,通过代码实现一定的计算和拼接。在实际场景中,如果需要批量转换很多身份证号码,可以将这段代码封装成一个函数或者工具类以供调用,简化操作流程,增强程序的可维护性和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现15位身份证号转18位的方法分析 - Python技术站

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

相关文章

  • PHP的运行机制与原理(底层)

    PHP是一种流行的服务器端脚本语言,基于C语言、Perl以及Java,可以在Web服务器上运行而不需要编译器的支持。PHP的运行机制和原理是理解PHP的编程思路和调试技巧的关键。以下是PHP的运行机制与原理的完整攻略: 1. PHP的运行机制 1.1 PHP的编译过程 PHP源码编写; 词法分析与语法分析:将PHP源码转化成抽象语法树; 中间代码生成:将抽象…

    PHP 2023年5月23日
    00
  • Php注入点构造代码

    首先我们先来简单了解一下PHP注入是什么。 PHP注入是一种网络攻击类型,攻击者通过在Web应用程序中注入恶意代码,以获取或破坏数据库数据,比如一个用户登录页面中的输入框,攻击者在输入框中输入自己构造的假值,并将其故意构造成SQL语句的形式,当该处理程序抽取输入值并与数据库联系时,这个注入值进入数据库系统并执行。 构造代码的过程中,攻击者需要找到它需要攻击的…

    PHP 2023年5月23日
    00
  • PHP指定截取字符串中的中英文或数字字符的实例分享

    下面我会详细讲解一下“PHP指定截取字符串中的中英文或数字字符的实例分享”的完整攻略。 1. substr()函数 PHP提供了一个内置函数substr(),可以用来截取字符串。该函数的语法如下: string substr ( string $string , int $start [, int $length ] ) 其中,$string为需要截取的字符…

    PHP 2023年5月26日
    00
  • PHP实现长轮询消息实时推送功能代码实例讲解

    一、长轮询是什么? 长轮询(Long-Polling)是一种服务器推送技术,可以在没有使用websocket的情况下,在客户端和服务器进行实时通信,使得浏览器可以像类似于事件驱动的方式获取服务端的实时数据。客户端向服务器请求获取数据时,服务器不会立即返回响应,而是会一直保持连接处于等待状态,直到有数据可以返回给客户端或者超时。 二、PHP实现长轮询的基本原理…

    PHP 2023年5月27日
    00
  • PHP学习之数组的定义和填充

    关于“PHP学习之数组的定义和填充”的攻略,以下是完整的介绍: 一、什么是数组 数组是一种数据结构,它由一系列值组成,每个值可以通过一个唯一的键来标识和访问。在PHP中,数组是一种非常常见的数据类型,通常用来存储一组相关的数据。 二、数组的定义 在PHP中,有多种方式来定义一个数组,其中最常见的是使用array()函数,也可以使用简单的语法糖[]。 以下是使…

    PHP 2023年5月26日
    00
  • PHP对称加密算法(DES/AES)类的实现代码

    要实现PHP的对称加密算法,我们可以使用PHP内建的openssl扩展。具体来说,使用openssl_encrypt和openssl_decrypt函数可以实现DES和AES算法。 使用openssl_encrypt函数加密 function encrypt($data, $key, $cipher = "aes-128-cbc") { …

    PHP 2023年5月27日
    00
  • php下的原生ajax请求用法实例分析

    下面是关于“php下的原生ajax请求用法实例分析”的完整攻略。 什么是原生ajax请求? 在介绍原生ajax请求的用法之前,我们需要先了解什么是ajax。AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术。它能够在不刷新页面的情况下从服务器加载数据,并可以在页面上进行实时更新。 原生ajax请求,指的…

    PHP 2023年5月26日
    00
  • Mac系统替换软件应用内文件的详细教程

    以下是“Mac系统替换软件应用内文件的详细教程”的完整攻略。 1. 前言 在 Mac 系统中,有些软件为了防止破解,会对一些关键文件进行加密或者隐藏,这使得我们很难修改软件的一些配置项。但是,如果我们想要对软件进行个性化定制或者优化,就必须替换这些文件。 在本攻略中,我们将会介绍如何替换软件应用内的文件。请注意,在进行类似操作之前,请备份好相关文件,以免出现…

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