在网站或者应用程序中,我们经常需要对用户输入的信息进行验证,其中身份证号码、护照号码和军官证号码都是常见的验证对象。在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中文网其他相关文章!