PHP实现15位身份证号转18位


参考博客:

  作者:selfimpr626
  来源:CSDN (根据身份证号计算年龄,15位身份证号码转18位)
  原文:https://blog.csdn.net/weixin_41888813/article/details/82457069

  作者:iteye_11848
  来源:CSDN (15位的身份证号转为18位)

  原文:https://blog.csdn.net/iteye_11848/article/details/81310676


第一代身份证:15位身份证号码的意义

1-2位省、自治区、直辖市代码; 
3-4位地级市、盟、自治州代码; 
5-6位县、县级市、区代码; 
7-12位出生年月日,比如670401代表1967年4月1日,这是和18位号码的第一个区别; 
13-15位为顺序号,其中15位男为单数,女为双数; 
与18位身份证号的第二个区别:没有最后一位的校验码。


第二代身份证:18位身份证号码的意义
  ①前1、2位数字表示:所在省份的代码,河南的省份代码是41哦!
  ②第3、4位数字表示:所在城市的代码;
  ③第5、6位数字表示:所在区县的代码;
  ④第7~14位数字表示:出生年、月、日;
  ⑤第15、16位数字表示:所在地的派出所的代码;
  ⑥第17位数字表示性别:奇数表示男性,偶数表示女性;
  ⑦第18位数字是校检码:也有的说是个人信息码,一般是随计算机随机产生,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。


代码示例:

<?php

function CardId15To18($card){
$len = strlen($card);
if($len == 18){
return $card;
}else if($len != 15){
return false;
}
$result = array(); for($i=0;$i<$len;$i++){
if($i<=5){
$result[$i] = intval($card[$i]);
}else{
//15位的年份是两位数,18位的是4位数,留出2位
$result[$i+2] = intval($card[$i]);
}
}
//留出的2位,补充为年份,年份最后两位小于17,年份为20XX,否则为19XX
if(intval(substr($card,6,2)) <= 17){
$result[6] = 2;
$result[7] = 0;
}else{
$result[6] = 1;
$result[7] = 9;
}
ksort($result);
//计算最后一位
//前十七位乘以系数[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2],
$arrInt = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $sum = 0;
for($i=0;$i<17;$i++){
$sum += $result[$i] * $arrInt[$i];
}
//对11求余,的余数 0 - 10
$rod = $sum % 11;
//所得余数映射到对应数字即可
$arrCh = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$result[17] = $arrCh[$rod];
return implode('',$result);
}

PHP实现15位身份证号转18位的更多相关文章

  1. juqery 判断所有input 不能为空 判断只能为数字 判断身份证号:18位和15位 判断是否银行卡号

    //jq 判断某字符串是否含有特殊符号 function CheckNum() { //定义数组保存特殊字符 var AllNumIsSame = new Array("’", & ...

  2. 16Aspx.com-将15位身份证转换成18位

    //********************************************************************************* //将15位身份证转换成18位时 ...

  3. js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr)

    js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr) 一.总结 1.|符号的使用:var reg=/^\d ...

  4. 导出数据excel表--身份证号后三位是0--〉还原

    导出数据excel表的身份证号后三位是0,怎么办? 数据导出前,在身份证号前加任意符号即可 例如: 结果

  5. Java随机生成18位身份证号

    package com.ihome.data; import java.text.SimpleDateFormat; import java.util.Calendar; import java.ut ...

  6. 中国居民18位身份证号验证方法,Java算法实现

    public static boolean validate18Idcard(String idcard){ if(idcard == null ) { return false; } if(idca ...

  7. ISO 7064:1983.MOD11-2校验码计算法 : (身份证校验码-18位)

    /* 假设某一17位数字是 17位数字 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 计算17位 ...

  8. 身份证号码15位转18位 C#实现

    [身份证最后一位神秘X的由来]身份证中的“冷知识”1999年的今天,<国务院关于实行公民身份号码制度的决定>被发布,当年10月1日实施.为什么有的有X?这位数是根据前17位计算出的校验码. ...

  9. js验证15位或18位身份证

    本篇文章是本人在网上搜集了一些验证,然后又个人进行一定修改的关于身份证的验证,欢迎修改指正..... function IdCardValidateRule(idCard) { var tip;    ...

随机推荐

  1. 【转】Qt Socket简单通信

    最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信. 1.UDP通信 UDP没有特定的server端和cl ...

  2. 洛谷 P1835 素数密度

    https://www.luogu.org/problemnew/show/P1835 对于40%,对每个数进行最大$O(\sqrt n)$的判断,因为n比较大所以超时. 想到线性筛,然而我们并不能筛 ...

  3. vue使用原生js实现滚动页面跟踪导航高亮

    需要使用vue做一个专题页面. 滚动页面指定区域导航高亮. BetterScroll:可能是目前最好用的移动端滚动插件 如何自定义CSS滚动条的样式? 监听滚动页面事件,对比当前页面的位置与元素的位置 ...

  4. 【php】instanceof

    instanceof 的使用还有一些陷阱必须了解.在 PHP 5.1.0 之前,如果要检查的类名称不存在,instanceof 会调用__autoload().另外,如果该类没有被装载则会产生一个致命 ...

  5. 七周成为数据分析师06_MySQL

    关于 MySQL 的知识,主要也是一些实操和练习. 因为个人之前已经专门练习过 MySQL 操作,这里就不做笔记,之后另写一篇博文记录 MySQL 知识. 同时附上本课程对应的文字教程: 如何七周成为 ...

  6. vss安装注意点

    一:装好IIS 二:win7用管理员权限打开 server configuration 才能打上勾 三:用计算机名,不要用 Ip地址

  7. Service 回顾

    绑定本地service需要实现onBind()方法

  8. LSTM block和cell区别

    LSTM的结构中每个时刻的隐层包含了多个memory blocks(一般我们采用一个block),每个block包含了包含一个Cell(有多个memory cell组成)和三个gate,一个基础的结构 ...

  9. TPS限流

    限流是高可用服务需要具备的能力之一 ,粗暴简单的就像我们之前做的并发数控制.好一点的有tps限流,可用令牌桶等算法实现.<亿级流量网站架构核心技术>一书P67限流详解也有讲.dubbo提供 ...

  10. Ubuntu 14.04 LTS 安装和配置Bochs

    Ubuntu 14.04 LTS 安装和配置Bochs       系统是:Ubuntu 14.04 LTS 64位 安装的是:bochs-2.6.8 Bochs 需要在 X11 环境下运行,因此你的 ...