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

yizhihongxing

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获取页面执行时间的方法(推荐) 在编写网站应用程序时,经常需要对页面的运行时间进行测量和优化。PHP提供了一种简单的方法来获取脚本执行的时间,本文将介绍其中两种方法。 方法一:microtime()函数 在PHP中,microtime()函数用于获取当前时间的微秒数,通过在脚本的不同位置调用microtime()函数,可以获取各个代码块的执行时间,并计…

    PHP 2023年5月26日
    00
  • php array_map使用自定义的函数处理数组中的每个值

    下面是关于 “php array_map使用自定义的函数处理数组中的每个值” 的完整攻略。 什么是 array_map 函数? array_map 函数是 PHP 标准库中的函数,它将一个数组的所有元素通过某个回调函数映射到另一个数组中,并返回新的数组。通俗的来说,就是通过一个函数对一个数组中的每个元素做处理,得到一个经过处理后的新数组。 array_map…

    PHP 2023年5月26日
    00
  • security.js实现的RSA加密功能示例

    下面是“security.js实现的RSA加密功能示例”的完整攻略。 1. 安装security.js 首先需要安装security.js,它是一个纯JavaScript库,可以在浏览器和Node.js环境下使用。 在浏览器环境下,可以通过script标签引入: <script src="https://cdn.bootcdn.net/aja…

    PHP 2023年5月27日
    00
  • mobiledit forensic express pro 7.0 64位完美激活安装教程(附注册机下载)

    我将按照以下格式,为你解释 mobiledit forensic express pro 7.0 64位完美激活安装教程(附注册机下载) 的完整攻略。 1. 下载并安装 mobiledit forensic express pro 7.0 首先,我们需要从官方网站下载 mobiledit forensic express pro 7.0 的安装文件。下载完成…

    PHP 2023年5月27日
    00
  • php调用c接口无错版介绍

    首先我们来讲解一下“PHP调用C接口无错版介绍”这个主题涉及到的一些基础概念: 1. 什么是C语言接口 C语言接口是一种允许多个程序间通讯和交换数据的机制,常用于C语言和其他编程语言之间的通讯。通过定义一组函数或数据结构,并保证其符合一定的规范,就可以在不同的编程语言中实现互操作性。 在本文中,我们主要关注PHP和C语言之间的接口。 2. 如何实现PHP调用…

    PHP 2023年5月27日
    00
  • Linux安装配置php环境的方法

    下面是关于“Linux安装配置php环境的方法”的完整攻略: 安装 Apache 首先,我们需要安装 Apache 服务器。在 Ubuntu 中,可以通过以下命令来安装: sudo apt-get update sudo apt-get install apache2 安装完成后,我们可以在浏览器中输入服务器的 IP 地址,如果出现“Apache2 Ubun…

    PHP 2023年5月30日
    00
  • php计算十二星座的函数代码

    针对“php计算十二星座的函数代码”的问题,我可以提供以下完整攻略: 1. 星座计算原理 首先,我们需要了解一下星座计算的原理。一般来说,我们通过给定的出生日期,可以得到一个人的星座信息。具体计算方法如下: 首先,将出生日期按照年、月、日分别进行处理,得到对应的数值。 然后,根据星座的划分规则,计算出对应的起始日期和结束日期。 最后,将出生日期与起始日期和结…

    PHP 2023年5月26日
    00
  • PHP回调函数及匿名函数概念与用法详解

    PHP回调函数及匿名函数概念与用法详解 PHP中回调函数和匿名函数是两个非常重要概念,对于编写高效、灵活的代码非常有帮助。本篇文章将从概念、用法、示例等方面详细讲解PHP中回调函数和匿名函数的应用。 1. 概念 回调函数 回调函数是指在调用一个函数的时候,将另一个函数作为参数传入,然后在函数内部执行这个函数。通俗地讲,就是在函数内部调用一个外部函数。 匿名函…

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