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

吾爱主题 阅读:98 2021-09-06 17:05:00 评论:0

本文实例讲述了PHP实现15位身份证号转18位的方法。分享给大家供大家参考,具体如下:

第一代身份证: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表示。

代码示例:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <?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程序设计有所帮助。

原文链接:https://www.cnblogs.com/gyfluck/p/10974973.html

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容