[phpstudy]PHP 验证身份证是否合法的函数

时间:2021-06-17  来源:php函数  阅读:

 

 代码如下

functionis_idcard($id)

{

  $id=strtoupper($id);

  $regx="/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";

  $arr_split=array();

  if(!preg_match($regx,$id))

  {

    returnFALSE;

  }

  if(15==strlen($id))//检查15位

  {

    $regx="/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";

    @preg_match($regx,$id,$arr_split);

    //检查生日日期是否正确

    $dtm_birth="19".$arr_split[2] .'/'.$arr_split[3].'/'.$arr_split[4];

    if(!strtotime($dtm_birth))

    {

      returnFALSE;

    }

    else

    {

      returnTRUE;

    }

  }

  else//检查18位

  {

    $regx="/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";

    @preg_match($regx,$id,$arr_split);

    $dtm_birth=$arr_split[2] .'/'.$arr_split[3].'/'.$arr_split[4];

    if(!strtotime($dtm_birth))//检查生日日期是否正确

    {

      returnFALSE;

    }

    else

    {

      //检验18位身份证的校验码是否正确。

      //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。

      $arr_int=array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

      $arr_ch=array(Ƈ',Ɔ','X',Ə',Ǝ',ƍ',ƌ',Ƌ',Ɗ',Ɖ',ƈ');

      $sign= 0;

      for($i= 0;$i< 17;$i++ )

      {

        $b= (int)$id{$i};

        $w=$arr_int[$i];

        $sign+=$b*$w;

      }

      $n=$sign% 11;

      $val_num=$arr_ch[$n];

      if($val_num!=substr($id,17, 1))

      {

        returnFALSE;

      }

      else

      {

        returnTRUE;

      }

    }

  }

}

 

[phpstudy]PHP 验证身份证是否合法的函数

http://m.bbyears.com/jiaocheng/124223.html

推荐访问:phpstorm php面试题 php数组转字符串 php教程
相关阅读 猜你喜欢
本类排行 本类最新