好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP检测身份证号码两个函数 - php函数

PHP检测身份证号码两个函数

检测身份证号码,最准确的肯定是通过国家的身份数据中心检测,想想也不知道,这个东西不是这么好弄的,所以下面介绍一个办法,通过前17位来检测,直接上例子了:

<?php  $idCard   =  '12345678901234567' ; //身份证号码前17位   $wi  =  array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  $ai  =  array ( '1' ,  '0' ,  'X' ,  '9' ,  '8' ,  '7' ,  '6' ,  '5' ,  '4' ,  '3' ,  '2' );  $sigma  = null;  for  ( $i  = 0;  $i  < 17;  $i ++) {    $sigma  += ((int)  $idCard { $i }) *  $wi [ $i ];  }  echo   "身份证号码:" . $idCard . $ai [( $sigma  % 11)];  ?>  //例2代码如下:   function  validation_filter_id_card( $id_card )   {   if ( strlen ( $id_card ) == 18)   {   return  idcard_checksum18( $id_card );   }   elseif (( strlen ( $id_card ) == 15))   {   $id_card  = idcard_15to18( $id_card );   return  idcard_checksum18( $id_card );   }   else    {   return  false;   }   }   // 计算身份证校验码,根据国家标准GB 11643-1999    function  idcard_verify_number( $idcard_base )   {   if ( strlen ( $idcard_base ) != 17)   {   return  false;   }   //加权因子    $factor  =  array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);   //校验码对应值    $verify_number_list  =  array ( '1' ,  '0' ,  'X' ,  '9' ,  '8' ,  '7' ,  '6' ,  '5' ,  '4' ,  '3' ,  '2' );   $checksum  = 0;   for  ( $i  = 0;  $i  <  strlen ( $idcard_base );  $i ++)   {   $checksum  +=  substr ( $idcard_base ,  $i , 1) *  $factor [ $i ];   }   $mod  =  $checksum  % 11;   $verify_number  =  $verify_number_list [ $mod ];   return   $verify_number ;   }   // 将15位身份证升级到18位    function  idcard_15to18( $idcard ){   if  ( strlen ( $idcard ) != 15){   return  false;   } else {   // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码    if  ( array_search ( substr ( $idcard , 12, 3),  array ( '996' ,  '997' ,  '998' ,  '999' )) !== false){   $idcard  =  substr ( $idcard , 0, 6) .  '18' .  substr ( $idcard , 6, 9);   } else {   $idcard  =  substr ( $idcard , 0, 6) .  '19' .  substr ( $idcard , 6, 9);   }   }   $idcard  =  $idcard  . idcard_verify_number( $idcard );   return   $idcard ;   }   // 18位身份证校验码有效性检查    function  idcard_checksum18( $idcard ){   if  ( strlen ( $idcard ) != 18){  return  false; }   $idcard_base  =  substr ( $idcard , 0, 17);   if  (idcard_verify_number( $idcard_base ) !=  strtoupper ( substr ( $idcard , 17, 1))){   return  false;   } else {   return  true;   }   } 

查看更多关于PHP检测身份证号码两个函数 - php函数的详细内容...

  阅读:36次