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日

相关文章

  • 微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决

    针对”微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决”这个问题,下面是一个完整的攻略: 问题背景 在开发微信小程序过程中,使用wx.uploadFile上传文件,在IOS手机上工作正常,但在安卓手机上无法上传出现问题,无法完成上传操作。 问题原因 经过排查发现,问题主要是由于安卓手机对图片大小的限…

    PHP 2023年5月30日
    00
  • 基于thinkPHP实现的微信自定义分享功能示例

    这里是“基于thinkPHP实现的微信自定义分享功能示例”的完整攻略。 一、前置要求 在开始之前,你需要了解以下知识: ThinkPHP框架的基本操作 微信公众平台的基本知识 JQuery的使用方法 二、准备工作 1. 创建项目 首先,我们需要在本地创建一个thinkPHP项目,命名为wx_share,并完成基础配置。 2. 配置微信公众平台 为了让我们的示…

    PHP 2023年5月23日
    00
  • PHP正则匹配反斜杠’\’和美元’$’的方法

    使用PHP进行正则匹配时,反斜杠’\’和美元符号’$’是常见的特殊字符,具有特殊的含义,需要进行转义才能匹配到它们本身。下面将详细讲解PHP正则表达式中如何匹配反斜杠和美元符号。 匹配反斜杠 匹配反斜杠可以使用双反斜杠’\\’进行转义,其中第一个反斜杠是为了转义第二个反斜杠。实际使用中,可以先在正则表达式外面使用单引号括起来,再在单引号内使用双反斜杠进行转义…

    PHP 2023年5月26日
    00
  • PHP调用其他文件中的类

    PHP调用其他文件中的类,需要使用对象实例化及命名空间的概念。以下是调用其他文件中的类的完整攻略: 导入类文件及命名空间 在使用其他文件中的类时,需要先导入类文件并指定命名空间。例如有一个名为Person.php的类文件,命名空间为App\Models,则需要在使用该类的文件中先导入该文件并指定命名空间: use App\Models\Person; 在导入…

    PHP 2023年5月26日
    00
  • 简单谈谈PHP vs Node.js

    简单谈谈PHP vs Node.js 前言 本文旨在探讨PHP和Node.js这两种Web开发语言的异同,并提供一些使用示例供读者参考。本文并非对PHP和Node.js的全面对比,仅供参考。 PHP和Node.js的异同 PHP和Node.js都是用于Web开发的语言,但它们的设计理念和实现方式却有很大的差异。下面我们将从几个方面来简单谈谈它们的异同。 编程…

    PHP 2023年5月26日
    00
  • PHP缓冲区用法总结

    PHP缓冲区用法总结 PHP缓冲区是PHP语言自带的一个缓存处理机制,可以有效地提高PHP程序的运行效率。本文将对PHP缓冲区的用法进行详细讲解,包括缓冲区开启、关闭、刷新等。 开启缓冲区 在PHP中,开启缓冲区可以通过以下两种方式实现: 在php.ini配置文件中设置output_buffering=On 在PHP脚本文件中使用ob_start()函数来开…

    PHP 2023年5月26日
    00
  • php 操作数组(合并,拆分,追加,查找,删除等)

    PHP是一种非常流行的Web开发语言,也是一个极其灵活的语言,它能够进行各种数据操作,其中最常见的操作就是对数组进行操作。下面是一些对PHP数组进行常见操作的攻略,包括合并数组、拆分数组、追加元素、查找元素及删除元素等。 合并数组 在PHP中,有多种方法可以合并数组,其中最简便的方法是使用array_merge()函数。该函数可以将两个或多个数组合并成一个数…

    PHP 2023年5月26日
    00
  • Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)

    下面是Zend Framework生成验证码并实现验证码验证功能的完整攻略。 一、前言 在Web开发中,为了防止机器恶意攻击和保证数据的安全性,我们通常会使用验证码的形式来进行用户身份验证。而Zend Framework提供了非常方便的验证码生成和验证功能,本文将对如何生成验证码以及实现验证码验证功能进行详细讲解。 二、生成验证码 生成验证码首先需要使用Ze…

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