functionValidation_filter_id_card ($id _card){ if(strlen($id _card) ==18){ returnIDCARD_CHECKSUM18 ($id _card); }ElseIf((strlen($id _card) ==15)){ $id _card=idcard_15to18 ($id _card); returnIDCARD_CHECKSUM18 ($id _card); }Else{ return false; }}//Calculate ID Check code, according to national standard GB 11643-1999functionIdcard_verify_number ($idcard _base){ if(strlen($idcard _base)!=17){ return false; } //weighting Factor $factor=Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //check code corresponding value $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;}//Upgrade 15-bit ID to 18-bitfunctionIdcard_15to18 ($idcard){ if(strlen($idcard)!=15){ return false; }Else{ //if the ID sequence code is 996 997 998 999, these are special codes for centenarians older than 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;}//Verification Code validity check for 18-bit ID cardfunctionIDCARD_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 Authentication ID Number