php正则判断是否为合法身份证号的方法

作者:袖梨 2022-06-24

 

 代码如下复制代码

/**

 * 判断是否为合法的身份证号码

 * @param $mobile

 * @return int

 */

functionisCreditNo($vStr){

  $vCity=array(

    ཇ',཈',ཉ',ཊ',ཋ',ད',དྷ',

    ན',ཛ',ཛྷ',ཝ',ཞ',ཟ',འ',

    ཡ',ཥ',ས',ཧ',ཨ',ཀྵ',ཪ',

    ཮',཯',཰',ཱ',ི',ཹ',ེ',

    ཻ',ོ',ཽ',ྃ',ྍ',ྎ',ྗ'

  );

  if(!preg_match('/^([d]{17}[xXd]|[d]{15})$/',$vStr))returnfalse;

  if(!in_array(substr($vStr, 0, 2),$vCity))returnfalse;

  $vStr= preg_replace('/[xX]$/i','a',$vStr);

  $vLength=strlen($vStr);

  if($vLength== 18) {

    $vBirthday=substr($vStr, 6, 4) .'-'.substr($vStr, 10, 2) .'-'.substr($vStr, 12, 2);

  }else{

    $vBirthday=ཏ'.substr($vStr, 6, 2) .'-'.substr($vStr, 8, 2) .'-'.substr($vStr, 10, 2);

  }

  if(date('Y-m-d',strtotime($vBirthday)) !=$vBirthday)returnfalse;

  if($vLength== 18) {

    $vSum= 0;

    for($i= 17 ;$i>= 0 ;$i--) {

      $vSubStr=substr($vStr, 17 -$i, 1);

      $vSum+= (pow(2,$i) % 11) * (($vSubStr=='a') ? 10 :intval($vSubStr, 11));

    }

    if($vSum% 11 != 1)returnfalse;

  }

  returntrue;

}

 

相关文章

精彩推荐