如何用PHP正则表达式验证输入字符串是否为正确的身份证号码、护照号码或军官证号码格式

广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买

如何用PHP正则表达式验证输入字符串是否为正确的身份证号码、护照号码或军官证号码格式

在网站或者应用程序中,我们经常需要对用户输入的信息进行验证,其中身份证号码、护照号码和军官证号码都是常见的验证对象。在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正则表达式验证输入字符串是否为正确的身份证号码、护照号码或军官证号码格式的详细内容,更多请关注9543建站博客其它相关文章!

广告:SSL证书一年128.66元起,点击购买~~~

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:laravel auth不能退出是什么原因
下一篇:如何更改.php图标

发表评论

关闭广告
关闭广告