$ IDCard = new IDCard (); Var_dump ($ IDCard: isCard ($ _ GET ['Card ']); /** * ID card processing */ Class IDCard { // Check whether the ID card is correct Public static function isCard ($ card ){ $ Card = self: to18Card ($ card ); If (strlen ($ card )! = 18 ){ Return false; } $ CardBase = substr ($ card, 0, 17 ); Return (self: getVerifyNum ($ cardBase) = strtoupper (substr ($ card, 17, 1 ))); } // Format the 15-digit ID card number to 18 Public static function to18Card ($ card ){ $ Card = trim ($ card ); If (strlen ($ card) = 18 ){ Return $ card; } If (strlen ($ card )! = 15 ){ Return false; } // If the ID card sequence code is 996 997 998 999, these are special codes for elderly people over years old If (array_search (substr ($ card, 12, 3), array ('20160301', '20160301', '20160301 '))! = False ){ $ Card = substr ($ card, 0, 6). '18'. substr ($ card, 6, 9 ); } Else { $ Card = substr ($ card, 0, 6). '19'. substr ($ card, 6, 9 ); } $ Card = $ card. self: getVerifyNum ($ card ); Return $ card; } // Calculate the ID card verification code based on the National Standard gb 11643-1999 Private static function getVerifyNum ($ cardBase ){ If (strlen ($ cardBase )! = 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 value $ Verify_number_list = array ('1', '0', 'x', '9', '8', '7', '6', '5 ', '4', '3', '2 '); $ Checksum = 0; For ($ I = 0; $ I <strlen ($ cardBase); $ I ++ ){ $ Checksum + = substr ($ cardBase, $ I, 1) * $ factor [$ I]; } $ Mod = $ checksum % 11; $ Verify_number = $ verify_number_list [$ mod]; Return $ verify_number; } } ?> |