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实现的Curl封装类Curl.class.php用法实例分析

    首先我们来介绍一下“php实现的Curl封装类Curl.class.php”的用法及其分析攻略。 1. 什么是Curl? Curl是一个在很多操作系统下都可以实现数据传输的命令行工具,而在php中,可以使用Curl库来进行http数据传输,比如获取远程网页内容、上传图片、发送post/get请求等等。 2. 什么是Curl.class.php Curl.cl…

    PHP 2023年5月26日
    00
  • PHP实现文件下载【实例分享】

    首先,在网站中实现文件下载是一个非常常见的功能,而PHP作为一种服务器端脚本语言,可以非常方便地实现这个功能。 以下是实现文件下载的步骤: 1.获取需要下载的文件名及其路径 在 PHP 中,可以使用 $_GET 方法接收传递过来的文件路径,使用 basename() 方法获取文件名。示例代码如下: $file = $_GET[‘file’]; $file =…

    PHP 2023年5月26日
    00
  • PHP删除数组中特定元素的两种方法

    当我们使用 PHP 数组时,有时候需要删除特定元素以满足我们的需要。在 PHP 中,有两种方法可以删除数组中特定元素,分别是使用 unset() 函数和使用 array_splice() 函数。 使用 unset() 函数删除数组中特定元素 unset() 函数可以用于删除数组中的单个元素。它的语法是: unset($array[$index]); 其中,$…

    PHP 2023年5月26日
    00
  • PHP 实现多服务器共享 SESSION 数据

    要实现多服务器共享 SESSION 数据,需要使用第三方存储来存储 SESSION 数据,例如使用 Redis、Memcached 等缓存技术或者使用数据库存储的方式来解决。 下面以使用 Redis 存储 SESSION 数据为例,详细介绍如何实现多服务器共享 SESSION 数据的攻略。 安装 Redis 首先需要安装 Redis,可以从 Redis 官网…

    PHP 2023年5月27日
    00
  • php代码中使用换行及(\n或\r\n和br)的应用

    在 PHP 开发中,我们常常需要输出一些带有换行的文本,这时就需要使用到换行符。本文将为大家详细介绍 PHP 代码中使用换行及(\n 或 \r\n 和)的应用,包括它们的定义、使用场景以及示例说明。 \n和\r\n的定义 在 PHP 中,\n 表示换行符,\r 表示回车符。它们通常都是配合另一个字符一起使用,例如\n或\r\n就表示换行。其中,\n 是 *n…

    PHP 2023年5月23日
    00
  • php读取html并截取字符串的简单代码

    下面是关于如何用PHP读取HTML并截取字符串的简单代码的攻略。 前置知识 在进行这个任务之前,你需要了解以下基础知识: 基本的PHP语法和函数 HTML标记和其语法 步骤 以下是使用PHP读取HTML并截取字符串的简单代码的步骤: 使用PHP内置函数file_get_contents()获取要读取的HTML文件的完整内容,将其赋值给一个变量。示例代码如下:…

    PHP 2023年5月26日
    00
  • php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    下面我将详细讲解“php文件打包下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件”的完整攻略。 1. ZipArchive介绍 ZipArchive是PHP自5.2.0版本之后新增的一个类,用于在服务器端对文件进行压缩和解压缩操作。ZipArchive支持将多个文件或文件夹压缩为一个ZIP压缩包,并通过HTTP协议将压缩包提供给用户下载等…

    PHP 2023年5月27日
    00
  • php中判断一个字符串包含另一个字符串的方法

    PHP中判断一个字符串是否包含另一个字符串是非常常见的需求,可以通过使用内置函数进行实现。以下是两种常用的方法: 方法一:strpos函数 PHP的内置函数strpos可以用来查找一个字符串在另一个字符串中第一次出现的位置,如果找到,则返回该位置的数字索引。如果未找到,则返回false。因此,我们可以使用这个函数来判断一个字符串是否包含另一个字符串: $st…

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