>  기사  >  백엔드 개발  >  PHP는 ID 번호가 올바른 예제 코드인지 확인합니다.

PHP는 ID 번호가 올바른 예제 코드인지 확인합니다.

怪我咯
怪我咯원래의
2017-07-11 15:35:202621검색

신분증 번호의 구조

신분증 번호는 17자리의 본문 코드와 1비트의 검사 코드로 구성된 특징적인 조합 코드입니다.

왼쪽부터 순서대로 주소코드 6자리, 생년월일 코드 8자리, 일련번호 3자리, 체크코드 1자리입니다.

주소 코드(처음 6자리)

는 코딩 대상이 위치한 군(시, 배너, 구)의 행정 구역 코드를 나타내며, 영주권이 위치한 지역(시, 배너, 구)을 나타냅니다. GB/T2260 규정에 따라 구현됩니다.

생년월일 코드(7~14자리)


는 인코딩 대상이 태어난 연도, 월, 일을 나타내며 GB/T7408 조항에 따라 구현됩니다. 연도, 월, 일 코드입니다.

일련번호(15~17자리)


는 동일한 주소로 식별되는 지역 내에서 같은 연도, 같은 월, 같은 날에 태어난 사람들에게 부여된 일련번호를 나타냅니다. 남성에게는 짝수 번호가 할당됩니다.

코드 확인(18자리)


1. 17자리 온톨로지 코드의 가중합산식


S= SUM(Ai * Wi), i=0, ... , 16, first 처음 17자리.


Ai: i번째 위치의 ID 번호의 디지털 값을 나타냅니다.


Wi: i번째 위치의 가중치를 나타냅니다.


Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

2 계수를 계산합니다.


Y = mod(S, 11)

3 계수를 통해 해당 검사 코드


Y를 얻습니다. 0 1 2 3 4 5 6 7 8 9 10


코드 확인: 1 0 ID 번호");

if($idc){echo "올바른";}else{echo "잘못된";}

예 2:


/********************php验证身份证号码是否正确函数*********************/ 
function is_idcard( $id ) 
{ 
  $id = strtoupper($id); 
  $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/"; 
  $arr_split = array(); 
  if(!preg_match($regx, $id)) 
  { 
    return FALSE; 
  } 
  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)) 
    { 
      return FALSE; 
    } else { 
      return TRUE; 
    } 
  } 
  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)) //检查生日日期是否正确 
    { 
      return FALSE; 
    } 
    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('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
      $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)) 
      { 
        return FALSE; 
      } //phpfensi.com 
      else 
      { 
        return TRUE; 
      } 
    } 
  } 
 
}

위 내용은 PHP는 ID 번호가 올바른 예제 코드인지 확인합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.