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


    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);
    }

  • 相关阅读:
    python 字符串替换功能 string.replace()可以用正则表达式,更优雅
    windows 10 如何设定计划任务自动执行 python 脚本?
    win10 设定计划任务时提示所指定的账户名称无效,如何解决?
    pandas数据分析输出excel产生文本形式存储的百分比数据,如何处理?
    coinmarketcap前20之cardano卡尔达诺(ADA艾达币)
    【SpringMVC】参数绑定
    【SpringMVC】入门
    【Hibernate】 二级缓存及查询缓存
    【Hibernate】事务处理
    【Hibernate】抓取策略
  • 原文地址:https://www.cnblogs.com/gyfluck/p/10974973.html
Copyright © 2020-2023  润新知