Heim  >  Artikel  >  Backend-Entwicklung  >  PHP überprüft, ob die ID-Nummer der richtige Beispielcode ist

PHP überprüft, ob die ID-Nummer der richtige Beispielcode ist

怪我咯
怪我咯Original
2017-07-11 15:35:202575Durchsuche

Der Aufbau der ID-Nummer

Die ID-Nummer ist ein charakteristischer Kombinationscode, bestehend aus einem 17-stelligen Bodycode und einem Ein-Bit-Prüfcode.

Die Reihenfolge von links nach rechts ist: sechsstelliger Adresscode, achtstelliger Geburtsdatumscode, dreistelliger Sequenzcode und einstelliger Prüfcode.

Adresscode (erste sechs Ziffern)

Gibt den Code an ObjektDer Verwaltungsbezirkscode des Landkreises (Stadt, Banner, Bezirk), in dem sich der ständige Wohnsitz befindet befindet, werden in GB /T2260 Vorschriften umgesetzt.

Geburtsdatumscode (siebte bis vierzehnte Ziffer)

gibt das Jahr, den Monat und den Tag der Geburt des Codierungsobjekts an und wird gemäß den Bestimmungen von GB/ implementiert. T7408. Zwischen japanischen Codes werden Jahr, Monat und keine Trennzeichen verwendet.

Laufender Code (15. bis 17. Ziffer)

gibt an, dass Personen, die im selben Jahr, Monat und Tag in dem durch denselben Adresscode gekennzeichneten Gebiet geboren wurden, programmierte Sequenznummern haben, Den Männern werden ungerade Nummern zugewiesen, den Frauen die geraden Nummern.

Prüfcode (achtzehnte Ziffer)

1. Siebzehnstellige Ontologiecode-gewichtete Summationsformel

S= SUM( Ai * Wi), d. h =0, ... , 16, summiere zuerst die Gewichte der ersten 17 Ziffern.

Ai: Stellt den digitalen Wert der ID-Nummer an der i-ten Position dar

Wi: Stellt den Gewichtungsfaktor an der i-ten Position dar

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

2. Berechnungsmodul

Y = mod(S, 11 )

3. Erhalten Sie den entsprechenden Prüfcode über das Modul

Y: 0 1 2 3 4 5 6 7 8 9 10

Prüfcode : 1 0 >

Aufruf der Ausweisüberprüfungsfunktion

$idc=is_idcard("Ausweisnummer");
/********************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; 
      } 
    } 
  } 
 
}
if($idc){echo "correct";}else{echo "error"; }


Beispiel 2:

Das obige ist der detaillierte Inhalt vonPHP überprüft, ob die ID-Nummer der richtige Beispielcode ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn