在網站或應用程式中,我們經常需要對使用者輸入的資訊進行驗證,其中身分證號碼、護照號碼和軍官證號碼都是常見的驗證對象。在PHP中,正規表示式是一種非常方便的工具,可用來驗證輸入字串的格式是否正確。本文將介紹如何使用PHP正規表示式驗證身分證號碼、護照號碼和軍官證號碼格式。
身分證號碼為18位或15位數字,18位身分證號碼的最後一位可能為數字或字母X。以下是驗證身分證號碼格式的PHP程式碼:
function checkIDCard($idcard){ if(strlen($idcard)==18){ return checkIDCard18($idcard); }elseif(strlen($idcard)==15){ $idcard = idcardPro18to15($idcard); return checkIDCard15($idcard); }else{ return false; } } // 验证18位身份证号码 function checkIDCard18($idcard){ $regx = "/^d{17}(d|x)$/i"; if(preg_match($regx, $idcard)){ $idcard = strtoupper($idcard); $idcard_year = intval(substr($idcard,6,4)); $idcard_month = intval(substr($idcard,10,2)); $idcard_day = intval(substr($idcard,12,2)); if(checkdate($idcard_month, $idcard_day, $idcard_year)){ $idcard_base = substr($idcard, 0, 17); if(getVerifyBit($idcard_base) == substr($idcard, 17, 1)){ return true; } } } return false; } // 验证15位身份证号码 function checkIDCard15($idcard){ $regx = "/^d{15}$/i"; if(preg_match($regx, $idcard)){ $idcard = idcardPro15to18($idcard); return checkIDCard18($idcard); }else{ return false; } } // 获取身份证校验码 function getVerifyBit($idcard_base){ if(strlen($idcard_base)!= 17){ return false; } $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $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; } // 将15位身份证号码转成18位 function idcardPro15to18($idcard){ if(strlen($idcard)!=15){ return false; }else{ $year = '19' . substr($idcard, 6, 2); $month = substr($idcard, 8, 2); $day = substr($idcard, 10, 2); $idcard = substr_replace($idcard, $year, 6, 2); $idcard = substr_replace($idcard, $month, 8, 2); $idcard = substr_replace($idcard, $day, 10, 2); return $idcard; } } // 将18位身份证号码转成15位 function idcardPro18to15($idcard){ if(strlen($idcard)!=18){ return false; }else{ $idcard = substr($idcard,0,6) . substr($idcard,8,9); return $idcard; } }
程式碼首先根據身分證號碼的長度呼叫不同的驗證函數。驗證18位元身分證號碼的函數checkIDCard18($idcard)
使用了正規表示式/^d{17}(d|x)$/i
,該正規表示式匹配18位數字頭和可選的數字或字母X。如果配對成功,函數繼續驗證身分證號碼的出生日期是否正確,以及取得身分證校驗碼,並與最後一位數字或字母 X 進行比較。驗證15位元身分證號碼的函數 checkIDCard15($idcard)
首先將其轉換為18位元身分證號碼再呼叫 checkIDCard18($idcard)
函數進行驗證。
護照號碼格式是固定的,為1位大寫字母 6-9位數字。以下是驗證護照號碼格式的PHP代碼:
function checkPassport($passport){ $regx = "/^[a-zA-Z]d{6,9}$/i"; if(preg_match($regx, $passport)){ return true; }else{ return false; } }
程式碼使用正規表示式/^[a-zA-Z]d{6,9}$/i
,該正規則表達式匹配以一個大寫字母開頭,後面6至9位為數字的字串。
軍官證號為10至18位數字和字母的組合,其中第10位至第16位為數字,第17位可以為數字或字母。以下是驗證軍官證號碼格式的PHP程式碼:
function checkOfficerCard($officercard){ $regx = "/^w{9,17}$/i"; if(preg_match($regx, $officercard)){ if(ctype_digit(substr($officercard, 9, 7))){ return true; }elseif(ctype_digit(substr($officercard, 9, 6)) && ctype_alpha(substr($officercard, 16, 1))){ return true; }else{ return false; } }else{ return false; } }
程式碼使用正規表示式/^w{9,17}$/i
,該正規表示式符合9至17位數字和字母的組合字串。如果配對成功,函數繼續驗證軍官證號碼的第10至16位是否為數字,以及第17位是否為數字或字母。
總結
本文介紹如何使用PHP正規表示式驗證身分證號碼、護照號碼和軍官證號碼格式。使用正規表示式可有效驗證使用者輸入資訊的格式是否符合要求。特別是身分證號碼的驗證,需要根據不同位數呼叫不同的驗證函數,包括驗證出生日期和產生校驗碼等。但是,在驗證資訊的同時,應對用戶的隱私要進行保護。
以上是如何用PHP正規表示式驗證輸入字串是否為正確的身分證號碼、護照號碼或軍官證號碼格式的詳細內容。更多資訊請關注PHP中文網其他相關文章!