在网站或者应用程序中,我们经常需要对用户输入的信息进行验证,其中身份证号码、护照号码和军官证号码都是常见的验证对象。在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位为数字的字符串。
立即学习“PHP免费学习笔记(深入)”;
军官证号码为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中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号