Function used to verify the validity of the ID card.
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 )) // check 15 bits {$ regx = "/^ (\ d {6}) + (\ d {2}) + (\ d {2 }) + (\ d {2}) + (\ d {3}) $/"; @ preg_match ($ regx, $ id, $ arr_split ); // check whether the birthday date is correct $ dtm_birth = "19 ". $ arr_split [2]. '/'. $ arr_split [3]. '/'. $ arr_split [4]; if (! Strtotime ($ dtm_birth) {return FALSE;} else {return TRUE ;}} else // check 18 bits {$ 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) // check whether the birthday date is correct {return FALSE;} else {// check whether the 18-digit ID card verification code is correct. // The checkpoint is generated according to ISO 7064: 1983.MOD 11-2. X can be considered as a number 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;} else {return TRUE ;}}}}